快速排序C++实现
注意红色部分为易错部分,蓝色部分的++不写也照样对,只不过每轮多比较一次已比过的数。还有q哨兵数一般选哪个都行,指的是一个数组里的数而不是数组下标,这里的返回值i=j,返回的是p哨兵位置(pivote)。当然你也可以让p=下标,不过这样每次交换后也要改变p.而在上式,p每次都是固定的。
#include <iostream>
using namespace std;
class quicksort {
public:
int quicks(int *a, int low, int high) {
int q = a[low]; // 基准
int i = low;
int j = high;
while (i < j) {
while (q <= a[j] && i < j) {
j--;
}
if (i < j) {
swap(a[i++], a[j]);
}
while (a[i] <= q && i < j) {
i++;
}
if (i < j) {
swap(a[i], a[j--]);
}
}
return j;
}
void quicksorts(int *a, int low, int high) {
if (low < high) {
int pivot = quicks(a, low, high);
quicksorts(a, low, pivot - 1);
quicksorts(a, pivot + 1, high);
}
}
};
int main() {
int arr[] = {2, 14, 32, 182, 34, 605, 99, 9, 7, 54, 22, 6, 7};
quicksort qs;
int len = sizeof(arr) / sizeof(int);
qs.quicksorts(arr, 0, len - 1);
for (int a = 0; a < len; a++) {
cout << arr[a] << "_ ";
}
return 0;
}
浙公网安备 33010602011771号