1.快速排序
对数列选择一个枢纽,从两端向中间遍历,大于枢纽往后甩,小于枢纽往前甩。直至两个指针相遇,相遇处为枢纽位置。返回该位置。
递归的前半段,后半段继续该过程。
#include<iostream>
using namespace std;
int Partition(int arrayNum[],int start,int end){
int pivotkey = arrayNum[start]; //用子表的第一个记录为枢轴
//循环条件,从表的两端交替地向中间扫描
while(start<end)
{
while(start<end && arrayNum[end]>pivotkey)
end--;
arrayNum[start]=arrayNum[end];
while(start<end && arrayNum[start]<=pivotkey)
start++;
arrayNum[end]=arrayNum[start];
}
arrayNum[start]=pivotkey;//枢轴记录到位
return start;//返回枢轴位置
}
void QSort(int arrayNum[],int start,int end){
//递归结束条件start>=end
if(start<end)
{
int pivotloc=Partition(arrayNum,start,end);//将表一分为2
QSort(arrayNum,start,pivotloc-1);//对低子表递归排序,pivotloc是枢轴位置
QSort(arrayNum,pivotloc+1,end);//对高子表递归排序
}
}
void QuickSort(int arrayNum[]){
QSort(arrayNum,0,6);
}
int main(){
int arrayNum[7]={30,32,9,64,14,17,8};
QuickSort(arrayNum);
for(int i=0;i<7;i++)
cout<<arrayNum[i]<<" ";
cout<<endl;
return 0;
}