程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 堆排序

堆排序

編輯:C++入門知識

#include<iostream>  
using namespace std;  
  
void adjustHeap(int a[], int n, int id)//{  
    int Min;  
    while(2*id+1<n){  
        Min=2*id+1;  
        if(2*id+2<n){  
            if(a[2*id+1] > a[id*2+2]){  
                Min=id*2+2;  
            }  
        }  
        if(a[id]<a[Min]){  
            break;  
        }else{  
            swap(a[id],a[Min]);  
            id=Min;  
        }  
    }  
}  
void buildHeap(int a[], int n)/*建立小頂堆*/{  
    for(int i = n /2 -1; i >= 0; i--) {  
        adjustHeap(a,n,i);  
    }  
}  
void HeapSort(int a[],int n){  
    buildHeap(a,n);  
    for(int i=n-1;i>=0;i--){  
            swap(a[0],a[i]);  
                n--;  
        adjustHeap(a,n,0);  
    }  
  
}  
int main(){  
  int a[12];  
  while(1){  
    int nn;  
    cin>>nn;  
    for(int i=0;i<nn;i++){  
  
        cin>>a[i];  
    }  
    HeapSort(a,nn);  
    for(int i=0;i<nn;i++){  
        cout<<a[i]<<"  ";  
    }  
    cout<<endl;  
  }  
 return 0;  
}  

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved