/* * 快速排序 * 基本思想 * 通过一趟排序,将要排序的数据分割成两个部分 * 其中一部分数据比另外一部分数据都要小 * 然后分别对两个部分再进行快速排序 * 整个过程可以用递归来解决 * 稳定性:不稳定 * 空间复杂度:O(1) * 时间复杂度:最好O(nlog2n) 最差O(n2) 平均O(nlog2n) */ /* * 划分 */ int Partition(int a[], int left, int right) { int i = left; int j = right; int temp; while(i <= right && j >= left && i < j) { while(i < j) { //交换 if(a[j] < a[i]) { temp = a[i]; a[i] = a[j]; a[j] = temp; break; } j--; } while(i < j) { if(a[i] > a[j]) { temp = a[i]; a[i] = a[j]; a[j] = temp; break; } i++; } } return i; } /* * 快速排序 */ void QuickSort(int a[], int left, int right) { if(left < right) { int i = Partition(a, left, right); QuickSort(a, left, i-1); QuickSort(a, i+1, right); } } int main() { int a[] = {3, 8, 15, 7, 21, 6}; QuickSort(a, 0, 5); for(int i=0; i<6; i++) { cout << a[i] << " "; } cout << endl; system("pause"); return 0; }