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);