一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Java實現堆排序(Heapsort)實例代碼

Java實現堆排序(Heapsort)實例代碼

2019-10-24 16:45java教程網 Java教程

這篇文章主要介紹了Java實現堆排序(Heapsort)實例代碼,有需要的朋友可以參考一下

代碼如下:


import java.util.Arrays;

 


public class HeapSort {

    public static void heapSort(DataWraper[] data){
        System.out.println("開始排序");
        int arrayLength=data.length;
        //循環(huán)建堆
        for(int i=0;i<arrayLength-1;i++){
            //建堆
            buildMaxHeap(data,arrayLength-1-i);
            //交換堆頂和最后一個元素
            swap(data,0,arrayLength-1-i);
            System.out.println(Arrays.toString(data));
        }
    }

    private static void swap(DataWraper[] data, int i, int j) {
        // TODO Auto-generated method stub
        DataWraper tmp=data[i];
        data[i]=data[j];
        data[j]=tmp;
    }
    //對data數組從0到lastIndex建大頂堆
    private static void buildMaxHeap(DataWraper[] data, int lastIndex) {
        // TODO Auto-generated method stub
        //從lastIndex處節(jié)點(最后一個節(jié)點)的父節(jié)點開始
        for(int i=(lastIndex-1)/2;i>=0;i--){
            //k保存正在判斷的節(jié)點
            int k=i;
            //如果當前k節(jié)點的子節(jié)點存在
            while(k*2+1<=lastIndex){
                //k節(jié)點的左子節(jié)點的索引
                int biggerIndex=2*k+1;
                //如果biggerIndex小于lastIndex,即biggerIndex+1代表的k節(jié)點的右子節(jié)點存在
                if(biggerIndex<lastIndex){
                    //若果右子節(jié)點的值較大
                    if(data[biggerIndex].compareTo(data[biggerIndex+1])<0){
                        //biggerIndex總是記錄較大子節(jié)點的索引
                        biggerIndex++;
                    }
                }
                //如果k節(jié)點的值小于其較大的子節(jié)點的值
                if(data[k].compareTo(data[biggerIndex])<0){
                    //交換他們
                    swap(data,k,biggerIndex);
                    //將biggerIndex賦予k,開始while循環(huán)的下一次循環(huán),重新保證k節(jié)點的值大于其左右子節(jié)點的值
                    k=biggerIndex;
                }else{
                    break;
                }
            }
        }
    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        DataWraper [] data={
                new DataWraper(21, ""),
                new DataWraper(30, ""),
                new DataWraper(49, ""),
                new DataWraper(30, "*"),
                new DataWraper(16, ""),
                new DataWraper(9, ""),

        };
        System.out.println("排序之前:\n"+Arrays.toString(data));
        heapSort(data);
        System.out.println("排序之后:\n"+Arrays.toString(data));
    }

}

 

結果:

排序之前:
[21, 30, 49, 30*, 16, 9]
開始排序
[9, 30, 21, 30*, 16, 49]
[16, 30*, 21, 9, 30, 49]
[9, 16, 21, 30*, 30, 49]
[9, 16, 21, 30*, 30, 49]
[9, 16, 21, 30*, 30, 49]
排序之后:
[9, 16, 21, 30*, 30, 49]

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 久久两性视频 | 朝鲜美女免费一级毛片 | 亚洲精品国产乱码AV在线观看 | 日产乱码卡1卡2卡三卡四在线 | les女同h高h喷水 | 国产欧美又粗又猛又爽老 | 奇米影视中文字幕 | 毛片影院 | 日本xnxnxnxnxn护士 | 国内自拍网红在综合图区 | 红杏网| 欧美一卡2卡3卡无卡 | 猫咪社区免费资源在线观看 | 色狠狠色狠狠综合天天 | ts人妖另类国产 | 九九热视频免费观看 | 黄蓉h系列 | 蜜色影院 | 国内精品一区视频在线播放 | 精品综合久久久久久8888 | 99久久久久国产 | 亚洲欧美日韩中文高清一 | 欧美一区不卡二区不卡三区 | 亚洲AV蜜桃永久无码精品无码网 | 男女刺激高清视频在线观看 | 日韩高清无砖砖区2022 | 丝袜白浆| 王雨纯羞羞 | 午夜久久久久久亚洲国产精品 | 国产午夜成人无码免费看 | 韩国三级日本三级香港三级黄 | 日韩在线天堂免费观看 | 国产一级特黄在线播放 | 接吻吃胸摸下面啪啪教程 | 99在线免费播放 | 亚洲国产欧美在线看片 | 娇妻被老外疯狂调教 | 99热这里只有精品国产免费 | 午夜精品久久久久久久99 | 亚洲日韩精品欧美一区二区一 | 四虎国产精品免费久久久 |