#include <iostream> using namespace std; void swap(int *a, int i, int j){ if(a[i] ^ a[j]){ a[i] ^= a[j]; a[j] ^= a[i]; a[i] ^= a[j]; } } void heapify(int *a, int i, int n){ int large, l, r; while(i < n){ large = i; l = 2 * i + 1, r = l + 1; if(l < n && a[l] > a[large]) large = l; if(r < n && a[r] > a[large]) large = r; if(large ^ i){ swap(a, i, large); i = large; } else{ break; } } } void heapSort(int *a, int n){ for(int i = n/2-1; i > -1; --i) heapify(a, i, n); for(int i = n-1; i > 0; --i){ swap(a, 0, i); cout<<"["; for(int j = 0; j < i+1; ++j) cout<<a[j]<<(j != i ? "," : ""); cout<<"]\n"; heapify(a, 0, i); } } int main() { int n; cin>>n; int a[n]; for(int i=0; i<n; ++i) cin>>a[i]; heapSort(a, n); cout<<"["; for(int i = 0; i < n; ++i) cout<<a[i]<<(i != n-1 ? "," : ""); cout<<"]"; return 0; }
10 5 3 2 1 4 9 7 6 8 10
[3,8,9,6,4,2,7,5,1,10] [1,8,7,6,4,2,3,5,9] [1,6,7,5,4,2,3,8] [1,6,3,5,4,2,7] [2,5,3,1,4,6] [2,4,3,1,5] [1,2,3,4] [1,2,3] [1,2] [1,2,3,4,5,6,7,8,9,10]