国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

Java實(shí)現(xiàn)堆排序(Heapsort)實(shí)例代碼

2019-11-26 15:51:47
字體:
供稿:網(wǎng)友

復(fù)制代碼 代碼如下:

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

}

結(jié)果:

排序之前:
[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]

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 灵川县| 光泽县| 手机| 治县。| 常熟市| 孝感市| 柘城县| 花垣县| 城步| 桓台县| 油尖旺区| 绥江县| 建平县| 安阳市| 美姑县| 景东| 建德市| 监利县| 孝义市| 专栏| 衡阳市| 辽中县| 巩留县| 博罗县| 阜平县| 和平县| 汕头市| 弥渡县| 休宁县| 定结县| 富裕县| 老河口市| 永丰县| 衡东县| 宁化县| 隆子县| 怀仁县| 新蔡县| 专栏| 溧阳市| 禹城市|