正如题目所说,这是一道像A+B一样简单的一道题,
code:
//从今天开始不再用宏定义 //采用松散的代码写法~~ #include <iostream> #include <algorithm> #include <cstdio> #include <vector> #include <cstring> using namespace std; void swap(int &a1,int &a2) { int tmp=a2; a2=a1; a1=tmp; } void max_heapfy(int A[],int i,int heap_size) { int l=i<<1; int r=i<<1|1; int largest; if(l<=heap_size && A[l]>A[i]) { largest=l; }else{ largest=i; } if(r<=heap_size && A[r]>A[largest]) { largest=r; } if(largest!=i) { swap(A[i],A[largest]); max_heapfy(A,largest,heap_size); } } void build_max_heap(int A[],int heap_size) { int i; for(i=heap_size/2;i>=1;i--) { max_heapfy(A,i,heap_size); } } void heap_sort(int A[],int len) { int i; build_max_heap(A,len); for(i=len;i>=2;i--) { swap(A[1],A[len]); len--; max_heapfy(A,1,len); } } int dat[1001],n; int main() { int cas,i; scanf("%d",&cas); while(cas--){ scanf("%d",&n); for(i=1;i<=n;i++) { scanf("%d",&dat[i]); } heap_sort(dat,n); for(i=1;i<n;i++) { printf("%d ",dat[i]); } printf("%d\n",dat[n]); } return 0; }