void partition(int *a, int size) {
int pivot = a[0];
int left = 0, right = 0;
for(left = 1, right = size-1; left <= right; left++, right--) {
if(a[left] >= pivot && a[right] <= pivot){
swap(left, right, a);
}
}
swap(0, right, a);
}
クイックソートを適用するための準備手順として、配列を分割するこのメソッドを作成しました。このサンプルデータでテストしました。
8 2 5 13 4 19 12 6 3 11 10 7 9
正しい出力は次のようになります。
6 2 5 7 4 3 8 12 19 11 10 13 9
ただし、実際の出力は次のとおりです。
6 2 5 13 4 3 8 12 19 11 10 7 9
アルゴリズムはスワップ13
する必要がありますが、上記のループ7
の条件が原因で失敗します。の場合にのみインクリメントし、の場合にのみデクリメント&&
したい。left
a[left] >= pivot
right
a[right]<= pivot