双边循环法
#include<iostream>
using namespace std;
int partition(int array[],int startIndex,int endIndex);
void quickSort(int array[],int startIndex,int endIndex){
//递归终止条件,startIndex>=endIndex
if(startIndex>=endIndex)
return;
//得到基准元素的位置
int pivotIndex=partition(array,startIndex,endIndex);
//根据基准元素,分成两部分进行递归排序
quickSort(array,startIndex,pivotIndex-1);
quickSort(array,pivotIndex+1,endIndex);
}
//分治(双边循环法)
int partition(int array[],int startIndex,int endIndex){
//取第1个位置的元素作为基准元素
int pivot=array[startIndex];
int left=startIndex;
int right=endIndex;
while(left!=right){
//控制right指针比较并左移
while(left<right&&array[right]>pivot){
right--;
}
//控制left指针比较并右移
while(left<right&&array[left]<=pivot){
left++;
}
//交换left和right指针所指向的元素
if(left<right){
int temp=array[left];
array[left]=array[right];
array[right]=temp;
}
}
//pivot和指针重合点交换
array[startIndex]=array[left];
array[left]=pivot;
return left;
}
int main()
{
int array[]={4,7,6,5,3,2,8,1};
int length=sizeof(array)/sizeof(array[0]);
quickSort(array,0,length-1);
for(int i=0;i<length;i++)
cout<<array[i]<<" ";
return 0;
}