参考引用:排序--快速排序(https://zhuanlan.zhihu.com/p/93129029)
void QuickSort(R[], int lo, int hi) { 将lo, hi用i, j两个副本进行拷贝(** 声明基准; if(划分长度大于等于2,即hi > lo) { 取基准为左端端点;//都可 当hi 不等于 lo时循环; 当hi > lo且R[hi] > temp时循环; hi--(继续往中间靠; R[lo] = R[hi];//发现小于基准的替换将其替换到左半区 当lo < hi且R[lo] < temp时循环; lo++(继续往中间靠; R[hi] = R[lo];//发现大于基准的将其替换到右半区 在hi,lo重合处放基准;//数据平衡,循环里有一个数据是直接被覆盖的,就是基准,现在将其添加回数组中 QuickSort(R[], lo, i - 1); QuickSort(R[], i + 1, hi);//递归继续进行快排 //要是前面没有进行副本拷贝在这里进行递归操作时就不太好判断边界了。 } }
#include <iostream> using namespace std; int BubbleSort() { return 0; } int QSort(int left, int right, int arr[]) { if (left >= right) { return 0; } int flag = arr[right]; int i = left; int j = right; while (i < j ) { while ((arr[i] <= flag) && i< j) i++; arr[j] = arr[i]; while((arr[j] > flag)&& i< j) j--; arr[i] = arr[j]; } arr[i] = flag; QSort(left, i-1, arr); QSort(i+1, right, arr); return 0; } int main() { const int size = 11; int arr[size] = { 1,8,9,0,5,4,6,3,2,7,8 }; QSort(0, 10, arr); for (int i = 0; i < size; i++) { cout << arr[i]; } return 0; }