完整代码
// // main.cpp // 数据结构8--排序 // // Created by 宋玉良 on 2020/12/23. // #include <bits/stdc++.h> using namespace std; const int MAXN = 1e4; struct Node{ int arr[MAXN]; int length; }; //希尔排序 void Xsort(Node &L){ for(int k=L.length/2;k>0;k/=2){ for(int i=k+1;i<=L.length;i++){ int temp=L.arr[i],p; for(p=i-k;p>=1 && L.arr[p]>temp;p-=k) L.arr[p+k]=L.arr[p]; L.arr[p+k]=temp; } } } //快速排序 void quicksort(Node &L,int l,int r){ if(l>=r) return ; int temp=L.arr[l]; int i=l,j=r; while(i<j){ while(i<j && L.arr[j]>=temp) j--; while(i<j && L.arr[i]<=temp) i++; swap(L.arr[i],L.arr[j]); } swap(L.arr[i],L.arr[l]); quicksort(L,l,i-1); quicksort(L,i+1,r); } //堆排序 void HeapAdjust(Node &L,int s,int e){ int temp=L.arr[s]; for(int i=2*s;i<=e;i*=2){ if(i<e && L.arr[i+1]>L.arr[i]) i++; if(temp>L.arr[i]) break; L.arr[s]=L.arr[i]; s=i; } L.arr[s]=temp; } void Headsort(Node &L){ //建初堆 for(int i=L.length/2;i>0;--i) HeapAdjust(L,i,L.length); for(int i=L.length;i>1;--i){ swap(L.arr[1],L.arr[i]); HeapAdjust(L,1,i-1); } } //排序 void Sort(Node &CL,Node &DL,Node &EL){ Xsort(CL); quicksort(DL,1,DL.length); Headsort(EL); } //打印排序后序列 void Print(Node CL,Node DL,Node EL){ cout<<"希尔排序:\n"; for(int i=1;i<=CL.length;i++) cout<<CL.arr[i]<<' '; cout<<'\n'; cout<<"快速排序:\n"; for(int i=1;i<=DL.length;i++) cout<<DL.arr[i]<<' '; cout<<'\n'; cout<<"堆排序:\n"; for(int i=1;i<=EL.length;i++) cout<<EL.arr[i]<<' '; cout<<'\n'; } int main() { Node CL,DL,EL; cout<<"请输入序列长度:\n"; cin>>CL.length; DL.length=EL.length=CL.length; cout<<"请输入序列:\n"; for(int i=1;i<=CL.length;i++){ cin>>CL.arr[i]; DL.arr[i]=CL.arr[i]; EL.arr[i]=CL.arr[i]; } Sort(CL,DL,EL); Print(CL,DL,EL); return 0; }