#include<iostream>
#include<stdlib.h>
using namespace std;
#define ___ <<","<<
insertSort(int n,int ia[]){
cout<<"insert sort!"<<endl;
for(int i=1;i!=n;++i)
for(int j=i;j!=0;--j)
if(ia[j]<ia[j-1]){
swap(ia[j],ia[j-1]);
}
}
inline static swap(int &a,int &b){
int temp=a;
a=b;
b=temp;
}
int getPivotIndex(int &L,int &R,int ¢er,int ia[]){//获得枢纽值,3值的中间值
if(ia[L]>ia[center])
swap(ia[L],ia[center]);
if(ia[center]>ia[R])
swap(ia[center],ia[R]);
if(ia[L]>ia[center])
swap(ia[L],ia[center]);
return center;
}
void quickSort(int L,int R,int ia[]){
if(L==R)
return;
else if(R-L==1&&ia[L]>ia[R]){
swap(ia[L],ia[R]);
return;
}
int center=(L+R)/2;
int PivotIndex=getPivotIndex(L,R,center,ia);
swap(ia[PivotIndex],ia[R]);
int i=L,j=R-1;
while(i<j)
{
for(;i!=R;)
if(ia[i]<ia[R])
++i;
else break;
for(;j!=L-1;)
if(ia[j]>ia[R])
--j;
else break;
swap(ia[i],ia[j]);//对调元素
}
/*最终,i指向大元素,j指向小元素*/
swap(ia[i],ia[j]);
swap(ia[i],ia[R]);
int l1=L,r1=i-1;
int l2=i+1,r2=R;
if(l1<=r1)
quickSort(l1,r1,ia);
if(l2<=r2)
quickSort(l2,r2,ia);
// for(int k=L;k!=R;++k)
// cout<<ia[k]<<",";
// cout<<endl;
}
int main()
{
const int count=20;
int ia[count]={88,15,22,63,45,55,32,73,99,17,
27,11,36,37,96,53,47,81,62,44};
quickSort(0,count-1,ia);
// insertSort(count,ia);
for(int i=0;i!=count;++i)
cout<<ia[i]<<",";
cout<<endl;
return system("pause");
}
快速排序 插入排序
最新推荐文章于 2021-08-20 13:35:03 发布