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

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

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]

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 九九九精品视频 | 国产一区风间由美在线观看 | 日韩一本在线 | 久久偷拍国2017的 | 男人的j进入女人的j免费 | 福利国产精品 | 公妇乱淫在线播放免费观看 | 思思91精品国产综合在线 | 国产一区二区三区久久精品 | 91免费在线 | 精品精品国产自在久久高清 | 日本一区二区免费在线 | 日本小网站 | 亚洲精品久久久久久婷婷 | 国产精品久久久久久 | 好 舒服 好 粗 好硬 好爽 | 亚洲福利 影院 | 蜜桃成熟3在线观看 | 日本老头4569gay| ai换脸杨颖被啪在线观看 | 亚洲国产精品自产在线播放 | 牛牛在线观看 | 手机在线免费观看视频 | 亚洲香蕉伊在人在线观婷婷 | 久久偷拍免费2017 | 高清在线一区二区 | 国产福利视频一区二区微拍 | www免费视频com| 日韩毛片免费线上观看 | 91精品国产综合久久消防器材 | 日韩欧美成末人一区二区三区 | 牧教师 | 久9视频这里只有精品123 | 国产精品第页 | 国产精品天天影视久久综合网 | 无码国产成人777爽死在线观看 | 国产亚洲福利精品一区二区 | 我年轻漂亮的继坶2中字在线播放 | 国产精品久久久久久久久齐齐 | 我在厨房摸岳的乳HD在线观看 | 欧美一区二区视频 |