1. 程式人生 > >堆排序——C++實現

堆排序——C++實現

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