N個のデータが,配列 a[0]〜 a[N-1]に格納されているとする.
クイックソート:
詳細化 :
配列a[0], a[1], ... a[N-1]の from 番目から to 番目までの範囲をソートする関数を
quick_sort(int a[], int from, int to)
とする.
quick_sort内での処理:
if(from < to) {
ピボットを定める( pivot ← a[(from+to)/2])
ピボットよりも小さいデータが左に,大きいデータが右にくるようデータを入れ換える
左側をソートする
右側をソートする
}
left ← from (左端)
right ← to (右端)
while( a[left] < pivot ) left++;
while( a[right] > pivot ) right--;
left ← left+1;
right ← right-1;
do {
...
} while( left <= right );
処理の具体化:
left = from;
right = to;
do {
while( a[left] < pivot ) left++;
while( a[right] > pivot ) right--;
a[left]とa[right]の値を交換する;
left++;
right--;
} while( left <= right );
quick_sort(a, from, right);
quick_sort(a, left, to);