#include <stdio.h>
#define LEN 10
void display(int S[], int length);
int *myQsort(int S[], int left, int right);
/*----------------------- QuickSort
クイックソート
軸要素は,左端(数列の先頭)でとってある.
Copyright by ECB.------------------------*/
//--------メイン関数------------------
void main(){
int S[LEN] = {84,121,43,93,140,83,14, 93, 181, 51}; //配列の初期値
int *R;
R = myQsort(S, 0, LEN-1); //クイックソート
display(R, LEN); //結果表示
}
//----------クイックソート--------------------
int *myQsort(int S[], int first, int last) {
int i,j;
int x;
x = S[first]; //ピボット
i = first; //first は 左境界,lastは 右境界
j = last;
while(true) { //無限ループ
int temp;
while( S[i] < x )
i++; //交換する要素の決定
while( x < S[j] )
j--;
if( i >= j )
break; //左境界が右境界を越えたら ループ終了
temp = S[i]; //S[i] と S[j]を交換
S[i] = S[j];
S[j] = temp;
i++; //境界をさらにせばめる.
j--;
}
display(S,LEN); //途中経過
if( first < i - 1 )
myQsort( S, first, i-1 ); //S[i], S[j]の変換があれば もう一度行なう. <- ポイント
if( j + 1 < last )
myQsort( S, j+1, last );
return S;
}
//-------結果表示---------------
void display(int S[], int length){
for(int i = 0; i<length; i++)
printf("%4d ",S[i]);
printf("\n");
}
|