/*
Author:Albert Tesla Wizard
Time:2020/11/22 21:35
*/
#include<bits/stdc++.h>
#define MAXSIZE 1000
using namespace std;
struct Sqlist
{
int* elem;
int length;
};
int create(Sqlist&L,int a[],int n)
{
L.elem=new int[MAXSIZE];
L.length=0;
for(int i=0;i<n;i++){L.elem[i+1]=a[i];L.length++;}
}
void print(Sqlist L)
{
for(int i=1;i<=L.length;i++)cout<<L.elem[i]<<" ";
cout<<'\n';
}
void HeapAdjust1(Sqlist&L,int s,int n)
{
while(2*s<=n)
{
int j=2*s;
if(j<n&&L.elem[j]<L.elem[j+1])j++;
if(L.elem[s]>=L.elem[j])break;
else swap(L.elem[s],L.elem[j]);
s=j;
}
}
void createHeap1(Sqlist&L)
{
int n=L.length;
for(int i=n/2;i>=1;i--)HeapAdjust1(L,i,n);
}
void HeapSort1(Sqlist&L)
{
createHeap1(L);
int n=L.length;
while(n>1)
{
swap(L.elem[1],L.elem[n--]);
HeapAdjust1(L,1,n);
}
}
int HeapAdjust2(Sqlist&L,int s,int n)
{
while(2*s<=n)
{
int j=2*s;
if(j<n&&L.elem[j]>L.elem[j+1])j++;
if(L.elem[s]<L.elem[j])break;
else swap(L.elem[s],L.elem[j]);
s=j;
}
}
int createHeap2(Sqlist&L)
{
int n=L.length;
for(int i=n/2;i>=1;i--)HeapAdjust2(L,i,n);
}
int HeapSort2(Sqlist&L)
{
int n=L.length;
createHeap2(L);
while(n>1)
{
swap(L.elem[1],L.elem[n--]);
HeapAdjust2(L,1,n);
}
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int a[10]={1,2,5,8,9,4,6,3,10,7};
Sqlist L;
create(L,a,10);
HeapSort2(L);
print(L);
return 0;
}
顺序表实现堆排序算法
最新推荐文章于 2024-12-05 10:44:47 发布
4542

被折叠的 条评论
为什么被折叠?



