输入n 输入n个数字 利用堆排序从大到小输出结果 堆排序:构成堆,堆顶堆尾交换位置排序 大顶堆:从小到大堆排序 小顶堆:从大到小堆排序 put(int x){ if(左子不存在) return ; int k=左; if(右存在且右更***) k=右; if(需要交换){ 交换 递归 } } 堆部分有序,大顶堆,上大下小,小顶堆,上小下大 大 put(int x){ if(x*2>n) return ; int k=x*2; if(k+1<=n&&a[k+1]>a[k]) k++; if(a[x]<a[k]){ swap(a[x],a[k]); put(k); } } 小 put(int x){ if(x*2>n) return ; int k=x*2; if(k+1<=n&&a[k+1]<a[k]) k++; if(a[x]>a[k]){ swap(a[x],a[k]); put(k); } } (责任编辑:admin) |