堆排序
来源:互联网 发布:大数据学什么专业 编辑:程序博客网 时间:2024/05/19 19:31
package sun;public class Sort {/** * 算法思想:从无序序列所确定的完全二叉树的第一个非叶子结点开始,从右至左,从下至上,对每个 * 结点进行调整,最终得到一个最大堆 * @param a 堆排序,使用完全二叉树,因此下标需要从1开始 * @param low * @param high */public static void shift(int[] a,int low,int high){int i = low,j = 2*i; //a[j]是a[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;}elsebreak;}a[i] = temp;}public static void heapSort(int[] a,int n){int i;int temp;//从下到上进行堆调整,4->8结点,3->8结点,2->8结点.......for(i = n/2 ; i >= 1 ; --i)shift(a,i,n);//从无序序列中,取出最大元素,放入序列最后(这个位置就是该元素的最后位置)for(i = n ; i >= 2 ; --i){temp = a[1];a[1] = a[i];a[i] = temp;shift(a,1,i-1); }}public static void main(String[] args) {//第一个元素不参与排序过程,因此位置始终不变int[] arr = { 0,49, 38, 65, 97, 76, 13, 27, 49 };heapSort(arr,arr.length - 1);for (int a : arr)System.out.println(a);}}
0 0
- 堆及堆排序
- 堆/堆排序特点
- 【二叉堆、堆排序】
- 二叉堆 & 堆排序
- 二叉堆 & 堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆和堆排序
- 堆排序(最大堆)
- 堆和堆排序
- 堆和堆排序
- 堆及堆排序
- 堆和堆排序
- 堆与堆排序
- 外行来理解内存、控制器、运算器
- Qt4.8下应用OpenCV2.4.4搭建环境详细步骤(win7系统)
- 怎样给Tab Control控件加上背景颜色或图片
- JVM调优总结:一些概念
- Java-Android
- 堆排序
- XXX网站直接修改Javascript变量提前修满学分
- mac截屏快捷键
- 对于sockte简单的理解与整理
- actionbar 返回箭头的替换和lable的字体颜色
- java基础(22)--单例模式序列化
- 北京林业大学“计蒜客”杯程序设计竞赛 网络赛 A. 喝酒
- 【matlab】中文无法显示解决办法
- C++中数字与字符串之间的转换