ゲーム制作者の為のプログラミング講座 -11ページ目

プログラムの勉強のための問題集 - 問題8.配列のデータをソートしなさい(2) - 単純交換法

問:記の配列のデータを単純交換法を用いて昇順にソートしなさい。
#include <stdio.h>

int main(){
	int array[] = { 7, 3, 9, 2, 10, 8, 6, 5, 4, 1 };
	
	ここにソートプログラムを書く

	for(int i=0; i<10; i++){
		printf( "%3d", array[i] );
	}
	
	return 0;
}


■単純交換法とは?■
ソートの手法の一つで、

たとえば、下記のような数列があるとする。


②⑧③①⑤


これを昇順にソートしたいとすれば、

一番後ろのデータから隣のデータと比べて、左のデータの方が大きい場合

データを入れ替えることで、小さい数字を左へ、左へと移動させていきます。


今回の例ですと、下記のようになります。


②⑧③ ①⑤


①と⑤を比べると、①の方が小さいですね、

ですので、データは入れ替えません。

次は下記の2つを比べます。

②⑧ ③① ⑤


③と①を比べると、①の方が小さいので、入れ替えます。

次は下記の二つを比べます。

② ⑧① ③⑤


⑧と①を比べると、①の方が小さいので、入れ替えます。

次は下記の二つを比べます。

②① ⑧③⑤


②と①を比べると、①の方が小さいので、入れ替えます。

①②⑧③⑤


こうすることで、一番小さい数字を左端へと持って行くことが出来ました。

コレと同様の作業を繰り返し、終端位置を一つずつ手前で終えていくことで

ソートすることが出来るのです。 これが単純交換法の考え方です。


解答と解説


このページのトップはこちら です。