完整代码

//
//  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;
 }