堆排序

来源:互联网 发布:超级本 知乎 编辑:程序博客网 时间:2024/06/05 22:32
#include<stdio.h>#include<stdlib.h>#include<iostream>using namespace std;typedef struct{    int *r;    int length;}sqlist;void createlink(sqlist &L){    int n;    L.length=0;    cout<<"输入链表长度:"<<endl;    cin>>n;    L.r=(int*)malloc((n+1)*sizeof(int));    int i;    cout<<"输入链表元素:"<<endl;    for(i=1;i<=n;i++)    {         cin>>L.r[i];         ++L.length;    }}void print(sqlist &L){    int i;    cout<<"输出链表元素:"<<endl;    for(i=1;i<=L.length;i++)    cout<<L.r[i]<<" ";    cout<<"\n";}void heapadjust(sqlist &L,int s,int m){    int j;    int rc=L.r[s];    for(j=2*s;j<=m;j*=2)    {        if(j<m&&L.r[j]<L.r[j+1])            j++;        if(!(rc<L.r[j]))            break;        L.r[s]=L.r[j];        s=j;    }    L.r[s]=rc;}void heapsort(sqlist &L){   // freopen("C:\\Users\\Administrator\\Desktop\\1.txt","r",stdin);    createlink(L);    int i,temp;    for(i=L.length/2;i>0;i--)    heapadjust(L,i,L.length);    for(i=L.length;i>1;i--)    {        temp=L.r[1];        L.r[1]=L.r[i];        L.r[i]=temp;        heapadjust(L,1,i-1);    }    cout<<"堆排序:\n";    print(L);}int main(){    sqlist l;    heapsort(l);    return 0;}