swustoj堆排序演算法(1015)
阿新 • • 發佈:2019-01-01
編寫程式堆排序演算法。按照非遞減排序,測試資料為整數。
Description
第一行是待排序資料元素的個數; 第二行是待排序的資料元素。
Input
一趟堆排序的結果。
Output
Sample Input
Sample Output
輸出格式:
A#B#C#D#
其中A,B,C,D程式碼有效資料,#程式碼空格.
Hint
1 2 3 | 10 50 36 41 19 23 4 20 18 12 22 |
1 | 4 12 20 18 22 41 50 36 19 23 |
A#B#C#D#
其中A,B,C,D程式碼有效資料,#程式碼空格.
#include<stdio.h> #include<algorithm> #include<string.h> #include<iostream> using namespace std; int _min; void Pushdown(int *a,int low,int high) { int i=low,j=2*i; int temp=a[i]; while(j<=high) { if(j<high&&a[j]>a[j+1]) { j++; } if(temp>a[j]) { a[i]=a[j]; i=j; j=2*i; } else break; } a[i]=temp; } void HeadSort(int *a,int n) { for(int i=n/2;i>=1;i--) { Pushdown(a,i,n); } // for(int i=n;i>=2;i--) //// { // swap(a[1],a[i]); // Pushdown(a,1,i-1); // break; // } } int main() { int a[1000]; int n; cin>>n; _min=9999999; for(int i=1;i<=n;i++) { cin>>a[i]; if(_min>a[i]) _min=a[i]; } HeadSort(a,n); for(int i=1;i<=n;i++) { cout<<a[i]<<' '; } return 0; }
Hint