堆排序
堆排序
#include<iostream> using namespace std; void Sift(int r[], int k, int m) { int j=2*i; while(j<=m) { if(j<m&&r[j]<r[j+1]) j++; if(r[i]>r[j]) break; else { int temp; temp=r[i]; r[i]=r[j]; r[j]=temp; i=j; j=2*i; } } } void HeapSort(int r[], int n) { for(int i=n/2; i>0; i--) { Sift(r,i,n); } for(int i=1; i<n; i++) { int temp; temp = r[1]; r[1] = r[n-i+1]; r[n-i+1] = temp; Sift(r,1,n-i); } } int main() { int r[100]; int n; cin>>n; for(int i=1; i<=n; i++) cin>>r[i]; HeapSort(r,n); for(int i=1; i<=n; i++) cout<<r[i]<<" "; return 0; }

浙公网安备 33010602011771号