☆ぽっち☆◎さんとモバ友になろう!
日記・サークル・友達・楽しみいっぱい!
-
- 2012/11/27 21:21
- クイックソート2
-
- コメント(0)
- 閲覧(18)
-
-
static void quicksort(int D[], int left, int right) {
int pivot; // 基準値の場所
if (left >= right ) return; // 入力データの数が1以下ならば処理を終了
pivot=partition(D,left,right); /*??*/ // 関数partitionの呼び出し
printf("left = %d, right = %d, pivot = %d\n", left, right, pivot);
print_data(D, DSIZE);
quicksort(D,left,pivot-1); /*??*/
quicksort(D,pivot+1,right); /*??*/
} // end quicksort
static int partition(int D[], int left, int right) {
int pd; // 基準値
int i, j,k;
// left < right
// 基準値となるデータD[k]を選択.kに適切な値を設定する.
pd=D[k]; /*??*/
swap(&D[k],&D[right]); /*??*/
i=left; /*??*/
j=right-1; /*??*/
while(i<=j){ /*??*/
while(D[i]<pd){i=i+1;} /*??*/
while((pd<=D[j])&&(i<=j)){j=j-1;} /*??*/
if(i<j)swap(&D[i],&D[j]); /*??*/
} /*??*/
swap(&D[i],&D[right]); /*??*/
return i; /*??*/
} // end partition
// ソート対象の配列の表示
static void print_data(int D[], int n){
int i;
for(i=0; i<n; i++) printf("%3d", D[i]);
printf("\n");
} // end print_data