快速排序实现
- #include using namespace std;#define MAX 1e6+10;int nArr[MAX];int nNum;void QuickSort(int *p, int nLeft, int nRight){ if(nLeft >= nRight)//当只有一个元素或没有元素时 直接返回 { return; } //i j 指向的位置写法与下面while循环中的写法有关 //是为了每次执行完swap操作后 可以大概自动指向下一次的界限 int i = nLeft - 1; int j = nRight + 1; //选取数组中间的谁人数字 作为对照 int nTemp = nArr[(nRight - nLeft)/2 + nLeft]; while(i < j) { //先i++ do i++; while(nArr[i] < nTemp); //先j-- do j--; while(nArr[j] > nTemp); if(i < j) swap(nArr[i], nArr[j]); //为什么要先i++ j-- 就是在执行完swap之后 要向中间移动 } //递归处理惩罚左右 //这里为什么界限是j呢?换成i行不可 留给各人思考吧! QuickSort(p, nLeft, j); QuickSort(p, j+1, nRight);}
复制代码 来源:https://blog.csdn.net/ZZHinclude/article/details/112006751
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |