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言語