C言語プログラミング クイックソート(再帰版)
とても人気がないように思えながらも、実はC言語を目的としてこのblogに足を運んでくださっている方、かなり多いみたいです。
これまでにソートとして挿入ソート、シェルソート、選択ソート、バブルソート、バケットソート(ビンソート)、クイックソートを紹介してきました。
また、フィボナッチ数列や階乗の再帰呼び出しについても書きましたね。
それら過去の記事に興味がある方はC言語のカテゴリーをご覧ください。
前回の最後にて告知しましたように、今回はクイックソートの再帰呼び出しバージョンです。
詳しい説明は省きますが、区間を分割するたびに自身を呼び出す仕組みになっています。
/* クイックソート関数(再帰版)ここから */
/* data[]:データ格納配列 nlef:ソートする範囲の先頭添字 nrig:ソートする範囲の末尾添字*/
void sort(int data[],int nlef,int nrig){
	int   i , cen , clef , temp;
	if(nlef < nrig){
		/*区間の中心を基準値として取得*/
		cen = (nlef + nrig) / 2;
		/*区間の基準値と区間の先頭を交換*/
		temp = data[nlef];
		data[nlef] = data[cen];
		data[cen] = temp;
clef = nlef;
		for(i = nlef + 1 ; i <= nrig ; i++){
			/*区間の基準値の右に基準値より小さい数値を並べる*/ 
			if(data[i] < data[nlef]){
				temp = data[i];
				data[i] = data[clef];
				data[clef] = temp;
			}
		}
		/*基準値を自分より小さい数値と大きい数値の間に移動する*/
		temp = data[nlef];
		data[nlef] = data[clef];
		data[clef] = temp;
		/*基準値より小さい範囲のソート*/
		sort(data , nlef , clef-1);
		/*基準値より大きい範囲のソート*/
		sort(data , clef+1 , nrig);
	}
}
/* クイックソート関数(再帰版)ここまで */
Wikipedia ソート
Wikipedia クイックソート
Wikipedia C言語