堆排序——C++实现

来源:互联网 发布:redis 查看所有数据库 编辑:程序博客网 时间:2024/06/02 20:41

c++代码:

#include<bits/stdc++.h>using namespace std;void heap_adjust(int a[], int s, int n){    int root=a[s];    for(int i=2*s;i<=n;i*=2){        if(i<n&&a[i]<a[i+1])    i++;        if(a[i]<a[s])   break;        a[s]=a[i];        s=i;    }    a[s]=root;}int main() {    freopen("F://inp.txt","r",stdin);    int n;    while(cin>>n){        int a[n+5];        for(int i=1;i<=n;i++)   cin>>a[i];        for(int i=n/2;i>0;i--)            heap_adjust(a,i,n);        for(int i=n;i>1;i--){            a[i]=a[i]^a[1];            a[1]=a[i]^a[1];            a[i]=a[i]^a[1];            for(int j=i/2;j>0;j--)  heap_adjust(a,j,i-1);        }        for(int i=1;i<=n;i++)   cout<<a[i]<<" ";        cout<<endl;    }    return 0;}
原创粉丝点击