基本思想:找到一个合适的位置,对于k而言。它的左边的所有元素均比他小,右边的元素均比他大。
如何做到?
遍历数组,为方便直接设置k就是起始的那个元素,设置两个指针分别在头和尾, 如果进行偶数次交换(0算偶数次)那就让a[j]和k比,奇数次那就让a[i]和k比。
#include <iostream> using namespace std; void Swap(int & a, int & b) { int tmp; tmp = a; a = b; b = tmp; } void QuickSort(int a[], int s, int e) { int k = a[s]; int i = s, j = e; if(s >= e) return; while(i != j)//交换的目的是为了让k左边的元素小于k,k右边的元素大于k { while(i<j && a[j]>=k)//偶数次交换 j--; Swap(a[i], a[j]); while(i<j && a[i]<=k)//奇数次交换 i++; Swap(a[i], a[j]); } QuickSort(a, s, i-1);//k左边排 QuickSort(a, i+1, e);//k右边排 }//完了之后a[i] == k int a[] = { 93,27,30,2,8,12,2,8,30,89}; int main() { int size = sizeof(a) / sizeof(int); QuickSort(a, 0, size-1); for(int i=0; i<size; i++) cout << a[i] << ","; cout << endl; return 0; } ReCclay 认证博客专家 嵌入式软件开发 机器/深度学习 全栈技术学习者 大家好,我是博主ReCclay,目前处于研究生阶段,就读于电子科技大学,主攻方向为汽车辅助驾驶算法研究。入站以来,凭借坚持与热爱,以博文的方式分享所学,截止目前累计博文数量达800余篇,累计受益人次达130w+次,涉及领域包括但不限于物联网开发、单片机开发、Linux驱动开发、FPGA开发、前/后端软件开发等。在未来我将继续专注于嵌入式相关领域,学习更多的科技知识,输出更高质量的博文。