自己写了一个很挫的程序,勉强能用吧,有时间再改进。
#include <iostream>
void quickSort(int a[], int size) {
if (size <= 1) {
return;
}
if (size == 2) {
if (a[0] > a[1]) {
int tmp = a[0];
a[0] = a[1];
a[1] = tmp;
}
return;
}
int povit = a[0];
int j = size - 1;
int i = 1;
int hole = 0;
while (true) {
while (i < j && a[j] > povit) {
j--;
}
if (i < j) {
a[0] = a[j];
hole = j;
while (i < j && a[i] < povit) {
i++;
}
if (i < j) {
a[j] = a[i];
a[i] = a[0];
hole = i;
}
else {
break;
}
}
else {
break;
}
}
a[hole] = povit;
quickSort(&(a[0]), hole);
quickSort(a + hole + 1, size - hole - 1);
}
int main()
{
quickSort(ax, 7);
//mergeSort(ax, 7);
for (int i = 0; i < 7; i++) {
std::cout << ax[i] << ", ";
}
std::cout << std::endl;
while (true);
return 0;
}
快速排序最差的时间复杂度为O(N²),最好和平均时间复杂度都是O(NlogN)。