博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
差点搞不懂快排
阅读量:4580 次
发布时间:2019-06-09

本文共 1315 字,大约阅读时间需要 4 分钟。

#include 
#include
#include
#include
#include
using namespace std;const int NUM = 25;/** 这里默认使用的pivot是a[left] partition将 a[]分成两部分,左边的部分小于pivot,右边的部分大于pivot**////两种partition方式都是对的/*int partition(int a[],int left, int right) //分割{ int base=a[left]; //基准元素 while(left < right) { while(left < right && a[right] >= base) --right; //从右向左找第一个比基准小的元素 a[left]=a[right]; while(left < right && a[left] <= base ) ++left; //从左向右找第一个比基准大的元素 a[right]=a[left]; } ///不会像下面一个一样产生交叉,因为在每个while循环里面都保证了这一点 a[left]=base; return left;}*/int partition(int a[],int left, int right){ int L = left; int R = right; while(left < right) { ///两个内层循环的方式left和right这两个下标会产生交叉 while(a[left] <= a[L] && left != R)///每次找出一个比pivot大的下标 left++; while(a[right] >= a[L] && right != L)///每次找出一个比pivot小的下标 right--; std::swap(a[left],a[right]);///交换这两个数,注意最后一次交换的时候left 和 right发生了交叉 } std::swap(a[left],a[right]);///交叉的下标对应的元素不用交换,使用下面一步来完成一次分割 std::swap(a[L],a[right]);///因为此时a[right] 是小于 pivot的,所以需要交换 return right;}void QuickSort(int a[],int left,int right){ int i; if(left

转载于:https://www.cnblogs.com/zhuyp1015/archive/2012/05/03/2481934.html

你可能感兴趣的文章