以下のURLの中にあるquicksortについて教えてください
http://tokyo-ct.net/usr/kosaka/for_students/CIntro/extension/quicksort/quicksort.html
その中のクイックソートは以下のようになっています。
List 3 クイックソートの関数(ピボットに中央位置の値を使う)
x:クイックソート対象の先頭アドレス
num:配列要素数
void QuickSort(int *x, int num)
{
int left,right,emptyPos;
int pivot;
int tmp;
if (num<=1) return;
if (num==2) {
if (x[1]<x[0]) {
tmp=x[0];
x[0]=x[1];
x[1]=tmp;
}
return;
}
pivot=x[num>>1]; x[num>>1]=x[0]; x[0]=pivot; left=0; right=num-1; /*x[left]が空要素の状態でスタート,pivotに個の要素のデータが退避しているとみなせる*/ while (1) { while (pivot<=x[right] && left<right)right--; if (left<right) x[left++]=x[right]; /*x[right]が移動したので空になった*/ else break; while (x[left]<=pivot && left<right) left++; if (left<right) x[right--]=x[left]; /*x[left]が移動したので空になった*/ else break; } emptyPos=right; /*whileループから抜け出てきたときにはleft==right,ここが空要素*/ x[emptyPos]=pivot; /*退避してあったデータを空要素に入れる。この位置の要素は位置確定*/ /*左右のグループに対して再帰呼び出し*/ if (1<emptyPos) QuickSort(x,emptyPos); if (emptyPos<num-2) QuickSort(x+emptyPos+1,num-emptyPos-1);
}
List3クイックソートの中の
pivot=x[num>>1];
x[num>>1]=x[0];
x[0]=pivot;
がわからないのですが詳しく教えてください
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。