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
ifa[left] >= pivot
和减少right
只有 if a[right]<= pivot
。