完整代码
//
// 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;
}

京公网安备 11010502036488号