快速排序
快速排序基本思想:
1.选择一个基准哨兵元素,通常选择第一个或者最后一个元素(可改进);
2.通过一趟排序讲待排序的记录分割成独立的两部分,其中一部分记录的元素值均比基准元素值小。另一部分记录的 元素值比基准值大;
3.此时基准元素放入正确位置;
4.然后分别对这两部分记录用同样的方法继续进行排序,直到整个序列有序;
时间复杂度: O(nlog2n)-->O(n^2)
空间复杂度:O(nlog2n)
是否稳定排序:不稳定
void quickSort(int *array, int left, int right) { if (left < right) { int guard = array[left]; int i = left, j = right; while (i < j) { while (i < j && array[j] >= guard)//从后向前,找第一个<guard的元素 { --j; } if (i < j) { array[i++] = array[j]; } while (i < j && array[i] < guard)//从前向后,找第一个>guard的元素 { ++i; } if (i < j) { array[j--] = array[i]; } } array[i] = guard; quickSort(array, left, i-1); quickSort(array, i+1, right); } }