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)将等于pivokey的元素置于左边区域
- end--;
- arrayNum[start]=arrayNum[end];//比枢轴记录小的记录移动到低端
- while(start<end && arrayNum[start]<=pivotkey)
- start++;
- arrayNum[end]=arrayNum[start];//比枢轴记录大的记录移动到高端
- }
- arrayNum[start]=pivotkey;//枢轴记录到位,完成扫描后,start == end,意味着这个点刚好是中轴节点的位置,中轴节点值需要归位。
- 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); //0 到 length -1.
- }
- 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;
- }