アフィリエイト広告を利用しています

広告

この広告は30日以上更新がないブログに表示されております。
新規記事の投稿を行うことで、非表示にすることが可能です。
posted by fanblog

2017年12月01日

《その158》 関数形式マクロ


 関数形式マクロ

 次のプログラムは、版明解C++中級編 p.128 にあるint型配列用のクイックソート関数 quickに、動作確認用のプログラムを付け足したものです。

 プログラムの2行目

#define swap(type, x, y) do { type t = x; x = y; y = t; } while (0)

は、関数形式マクロです。


このマクロ定義により、プログラム中の

swap(int, v[pl], v[pr]);

は、コンパイル時に

do { int t = v[pl]; v[pl] = v[pr]; v[pr] = t; } while (0);

に書き換えられます。


// ------------------------------------
#include <iostream>

#define swap(type, x, y) do { type t = x; x = y; y = t; } while (0)

// int型配列のクイックソート
void quick(int v[], int n)
{
if (n > 0) {
int pl = 0;
int pr = n - 1;
int x = v[(pl + pr) / 2];

do {
while (v[pl] < x) pl++;
while (v[pr] > x) pr--;
if (pl <= pr) {
swap(int, v[pl], v[pr]);
pl++;
pr--;
}
} while (pl <= pr);
if (0 < pr) quick(v, pr + 1);
if (pl < n - 1) quick(v + pl, n - pl);
}
}

int main() {
int num[] = { 25, 21, 16, 12, 17, 11, 23, 19, 28, 17, 22, 24, 11, 18 };

std::cout << "◆ 25, 21, 16, 12, 17, 11, 23, 19, 28, 17, 22, 24, 11, 18\n";

quick(num, sizeof(num) / sizeof(num[0]));

std::cout << "→ ";
for (int i = 0; i < sizeof(num) / sizeof(num[0]); i++)
std::cout << num[i] << " ";
std::cout << '\n';
}
// ------------------------------------

f03_0031.png


新版 明解C 入門編 (明解シリーズ)

新品価格
¥2,916から
(2017/11/10 13:13時点)

新版 明解C 中級編 (明解シリーズ)

新品価格
¥2,916から
(2017/11/10 13:14時点)





続きを読む...

《その157》 クイックソートのソート手順


 クイックソートのソート手順

 次の配列 a を、クイックソートの手順に従ってソートしてみます。

f03_002104.png
  以下、赤色の数字がそれぞれの場合の基準値です。
f03_002202.png
 プログラムは、関数の再帰的呼出し等で同じ作業を繰り返すような形のものになるので、このソート手順の例でもそうですが、不要な作業も入ってきます。場合分けして、それを避けるより、無駄な部分が生じても単純作業に徹するほうがコスト的にも有利だったりするようです。
f03_002302.png
f03_0024.png


新版 明解C 入門編 (明解シリーズ)

新品価格
¥2,916から
(2017/11/10 13:13時点)

新版 明解C 中級編 (明解シリーズ)

新品価格
¥2,916から
(2017/11/10 13:14時点)






 たまに、クリック お願いします m(_ _)m

 AA にほんブログ村 IT技術ブログ C/C++へ

こうすけ:メール kousuke_cpp@outlook.jp

【1】★★C++ 記事目次★★ ← 利用可能です。
・新版明解C++入門編 / 新版明解C++中級編
・その他 C++ 関連記事

【2】★★こうすけ@C#★★
・C# の初歩的な記事


検索
<< 2017年12月 >>
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31            
プロフィール
こうすけさんの画像
こうすけ

 たまに、クリック お願いします m(_ _)m

 AA にほんブログ村 IT技術ブログ C/C++へ

こうすけ:メール kousuke_cpp@outlook.jp

【1】★★C++ 記事目次★★ ← 利用可能です。
・新版明解C++入門編 / 新版明解C++中級編
・その他 C++ 関連記事

【2】★★こうすけ@C#★★
・C# の初歩的な記事


×

この広告は30日以上新しい記事の更新がないブログに表示されております。