【面试准备】堆排

来源:互联网 发布:战舰世界mac 国服切换 编辑:程序博客网 时间:2024/06/01 08:20
#include <iostream>using namespace std;void AdjastHeapSort(int a[],int i,int n){//调整节点i,数组共有n个节点if(n == 1||i >(n-2)/2){return ;}int iLeft = 2*i+1;//i从0开始int iRight = 2*i+2;if(iRight<=n-1){if(a[i]>=a[iLeft]&&a[i]>=a[iRight]){return ;}if(a[i]<a[iLeft]&&a[iRight]<=a[iLeft]){int temp = a[iLeft];a[iLeft] = a[i];a[i] = temp;AdjastHeapSort(a,iLeft,n);return ;}if(a[i]<a[iRight]&&a[iLeft]<=a[iRight]){int temp = a[iRight];a[iRight] = a[i] ;a[i] = temp;AdjastHeapSort(a,iRight,n);return ;}}else{if(a[i]>=a[iLeft]){return ;}else{int temp = a[iLeft];a[iLeft] = a[i];a[i] = temp;AdjastHeapSort(a,iLeft,n);return ;}}}void CreateHeap(int a[],int n){int iFirst = (n-2)/2;for(;iFirst>=0;iFirst--){AdjastHeapSort(a,iFirst,n);}}void HeapSort(int a[],int n){CreateHeap(a,n);int temp;for(int i = 0;i<n-1;i++){temp = a[n-i-1];a[n-i-1] = a[0];a[0] = temp;AdjastHeapSort(a,0,n-i-1);}}int main() {int a[] = {1,2,3,5,343,5,3,2,4,2,2,23};HeapSort(a,12);for(int i = 0 ; i < 12 ;++ i){cout<<a[i]<<" ";}cout<<endl;return 0;}

0 0
原创粉丝点击