zoukankan      html  css  js  c++  java
  • java堆排序(大根堆)

    实现堆排序的算法思路是先创建堆,也就是从叶子节点起对每一层的孩子节点及其对应位置的父亲节点进行比较,较大的孩子节点替换较小的父亲节点,一级一级比较替换,就创建出了大根堆,小根堆反之。创建好大根堆以后,我们,将整棵树的根节点与最后最后一个节点替换位置,然后去除最后一个节点,在创建一个新的大根堆,以此类推,完成排序。代码如下:

    /**
    * <p>堆排序
    * @param int[] arr
    * @return int[]
    * */
    public int[] heapSort(int[] arr){

    arr=creatHeap(arr,arr.length-1);//初始化大根堆
    //每次替换大根到对应最后位置,有后往前排序
    for(int i=arr.length-1;i>0;i--){
    int temp=arr[i];
    arr[i]=arr[0];
    arr[0]=temp;
    creatHeap(arr,i-1);//对去除根的数组再次排序为大根堆
    }
    return arr;
    }

    /**

    		 * <p>堆创建算法
    * @param int[] arr
    * @return int[]
    * */
    public int[] creatHeap(int[] arr,int length){
    System.out.println("建立大根堆:");
    for(int i=length;i>0;i--){
    int root=i;
    int j=(root-1)/2;
    /*叶子节点和上一层的根比较*/
    while(root>0){
    if(arr[root]>arr[j]){
    int temp=arr[j];
    arr[j]=arr[root];
    arr[root]=temp;

    }
    /*改变位置,比较上一层与其父层节点*/
    root=j;
    j=(root-1)/2;

    }
    }
    for(int i=0;i<arr.length;i++){
    System.out.print(" arr["+i+"]="+arr[i]);
    }
    System.out.println("");
    return arr;
    }
  • 相关阅读:
    PHP安装扩展mcrypt以及相关依赖项 【PHP安装PECL扩展的方法】
    linux设置开机自动启动
    php安装gd库
    php扩展库 说明
    把lighttpd配置为系统服务
    安装mysql5.6
    怎样当一个企业舍不得的人
    JQuery的$(document).ready(function(){})与JS的window.onload 的各自优势!
    JS中Null与Undefined的区别
    JS文本框输入限制
  • 原文地址:https://www.cnblogs.com/sessionbest/p/8996143.html
Copyright © 2011-2022 走看看