サイトマップ / C言語講座>出入り口>総目次>目次:ソート>単純選択ソート
/* 今日は、単純選択ソートについて学びます。単純選択ソートのアルゴリズムは単純です。
要素数 n 個の配列があるとします。配列の一番左の要素と、残りの全ての要素と比較して、残りの要素の最小値の方が、一番左の要素より小さければ交換します。
次に配列の 2 番目の要素と、残りの全ての要素と比較して、残りの要素の最小値の方が、2 番目の要素より小さければ交換します。
この処理を、順次、n - 1 番目の要素まで行うと、ソートが完了します。今回のソースプログラムでは、8 個の要素からなるint 型の配列の要素をソートします。 */
#include <stdio.h> #define NUM_DATA 8 void SimSelSort(int num[ ], int n) ; void ShowData(int num[ ], int n); void main(void); /* n 個のデータの単純選択ソートを行う */ void SimSelSort(int num[ ], int n) { int i, j, k, min, temp; for (i = 0; i < n - 1; i++) { min = num[i]; /* i 番目の要素を暫定的に最小値とし */ k = i; /* 添字を保存 */ for (j = i + 1; j < n; j++) { if (num[j] < min) { /* より小さい値が現れたら */ min = num[j]; /* 最小値の入れ替え */ k = j; /* 添字を保存 */ } } /* このループを抜けるとk に最小値の添字が入っている */ temp = num[i]; /* i 番目の要素と最小値の交換 */ num[i] = num[k]; num[k] = temp; ShowData(num, NUM_DATA); } } /* n 個のデータを表示 */ void ShowData(int num[ ], int n) { while (n--) printf("%d ", *num++); printf("\n"); } void main(void) { /* ソート対象のデータ */ int num[ ] = {8, 7, 6, 5, 4, 3, 2, 1}; /* ソート前のデータの表示 */ printf("ソート前: "); ShowData(num, NUM_DATA); printf("\n"); /* ソート */ SimSelSort(num, NUM_DATA); printf("\n"); /* ソート後のデータの表示 */ printf("ソート後: "); ShowData(num, NUM_DATA); printf("\n"); } |
/* プログラムを実行すると、要素の交換が行われた時に、ソートの途中経過も表示されます。単純挿入ソートのアルゴリズムを理解するのに役立つでしょう。 */
/* (C) 2000- YFプロ. All Rights Reserved. */ 提供:C言語講座−それ自体コンパイルできる教材を使った講座です−