欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java 十大排序算法之堆排序刨析

 更新時(shí)間:2021年11月24日 09:25:22   作者:龍弟-idea  
堆排序是利用堆這種數(shù)據(jù)結(jié)構(gòu)而設(shè)計(jì)的一種排序算法,堆排序是一種選擇排序,它的最壞,最好,平均時(shí)間復(fù)雜度均為O(nlogn),它也是不穩(wěn)定排序。首先簡(jiǎn)單了解下堆結(jié)構(gòu)

二叉堆是完全二叉樹(shù)或者是近似完全二叉樹(shù)。
二叉堆滿足二個(gè)特性︰

1.父結(jié)點(diǎn)的鍵值總是大于或等于(小于或等于)任何一個(gè)子節(jié)點(diǎn)的鍵值。

2.每個(gè)結(jié)點(diǎn)的左子樹(shù)和右子樹(shù)都是一個(gè)二叉堆(都是最大堆或最小堆)。

任意節(jié)點(diǎn)的值都大于其子節(jié)點(diǎn)的值——大頂堆(最后輸出從小到大排)
任意節(jié)點(diǎn)的值都小于其子節(jié)點(diǎn)的值———小頂堆(最后輸出從大到小排)

堆排序步驟

1.堆化,反向調(diào)整使得每個(gè)子樹(shù)都是大頂或者小頂堆(建堆)
2.按序輸出元素∶把堆頂和最末元素對(duì)調(diào),然后調(diào)整堆頂元素(排序)

堆排序代碼實(shí)現(xiàn)(大頂堆)

public class HeapSort {
    private static void heapSort(int[] arr) {
        // 構(gòu)造初始堆(大頂堆),從第一個(gè)非葉子節(jié)點(diǎn)開(kāi)始調(diào)整,左右孩子節(jié)點(diǎn)中較大的交換到父節(jié)點(diǎn)中
        for (int i = arr.length / 2 - 1; i >= 0; i--) {
            heapAdjust(arr, i, arr.length);
        }
        // 調(diào)整堆結(jié)構(gòu),交換堆頂元素與末尾元素
        for (int j = arr.length - 1; j > 0; j--) {
            swap(arr, 0, j);// 將堆頂元素與末尾元素進(jìn)行交換
            heapAdjust(arr, 0, j);// 重新對(duì)堆進(jìn)行調(diào)整
        }
    }
 
    private static void swap(int[] arr, int a, int b) {
        int temp = arr[a];
        arr[a] = arr[b];
        arr[b] = temp;
    }
 
    // 調(diào)整大頂堆
    private static void heapAdjust(int[] arr, int i, int len) {
        int temp = arr[i], index = 2 * i + 1;
        while (index < len) {
            if (index + 1 < len && arr[index] < arr[index + 1]) {// 如果左子結(jié)點(diǎn)小于右子結(jié)點(diǎn),index指向右子結(jié)點(diǎn)
                index += 1;
            }
            if (arr[index] > temp) {// 如果子節(jié)點(diǎn)大于父節(jié)點(diǎn),將子節(jié)點(diǎn)值賦給父節(jié)點(diǎn)
                arr[i] = arr[index];
                i = index;
                index = 2 * i + 1;
            } else {
                break;
            }
        }
        arr[i] = temp;
    }
 
    public static void main(String[] args) {
        int[] arr = {1,28,3,21,11,7,6,18};
        heapSort(arr);
        System.out.println(Arrays.toString(arr));
    }
}

時(shí)間復(fù)雜度:O(nlogN)

到此這篇關(guān)于Java 十大排序算法之堆排序刨析的文章就介紹到這了,更多相關(guān)Java 堆排序內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java利用SMB讀取遠(yuǎn)程文件的方法

    java利用SMB讀取遠(yuǎn)程文件的方法

    這篇文章主要為大家詳細(xì)介紹了java利用SMB讀取遠(yuǎn)程文件的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • 解決SpringBoot整合MybatisPlus分模塊管理遇到的bug

    解決SpringBoot整合MybatisPlus分模塊管理遇到的bug

    這篇文章主要介紹了解決SpringBoot整合MybatisPlus分模塊管理遇到的bug,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Windows下如何安裝配置Redis環(huán)境

    Windows下如何安裝配置Redis環(huán)境

    這篇文章主要介紹了Windows下如何安裝配置Redis環(huán)境,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-12-12
  • 基于FlashPaper實(shí)現(xiàn)JSP在線閱讀代碼示例

    基于FlashPaper實(shí)現(xiàn)JSP在線閱讀代碼示例

    這篇文章主要介紹了基于FlashPaper實(shí)現(xiàn)JSP在線閱讀代碼示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-10-10
  • jsp+servlet實(shí)現(xiàn)簡(jiǎn)單登錄頁(yè)面功能(附demo)

    jsp+servlet實(shí)現(xiàn)簡(jiǎn)單登錄頁(yè)面功能(附demo)

    本文主要介紹了jsp+servlet實(shí)現(xiàn)簡(jiǎn)單登錄頁(yè)面功能登錄成功跳轉(zhuǎn)新頁(yè)面,登錄失敗在原登錄界面提示登錄失敗信息,對(duì)初學(xué)者有一定的幫助,感興趣的可以了解一下
    2021-07-07
  • java中關(guān)于return返回值的用法詳解

    java中關(guān)于return返回值的用法詳解

    在本篇文章里小編給大家整理的是一篇關(guān)于java中關(guān)于return返回值的用法詳解內(nèi)容,有興趣的朋友們可以學(xué)習(xí)參考下。
    2020-12-12
  • 你知道Java中的注解可以繼承嗎?

    你知道Java中的注解可以繼承嗎?

    注解想必大家都用過(guò),也叫元數(shù)據(jù),是一種代碼級(jí)別的注釋,可以對(duì)類或者方法等元素做標(biāo)記說(shuō)明。那么今天我想問(wèn)大家的是類被繼承了,注解能否繼承呢?可能會(huì)和大家想的不一樣,感興趣的可以往下看
    2022-12-12
  • Java數(shù)組常見(jiàn)應(yīng)用詳解【創(chuàng)建、遍歷、排序、查找】

    Java數(shù)組常見(jiàn)應(yīng)用詳解【創(chuàng)建、遍歷、排序、查找】

    這篇文章主要介紹了Java數(shù)組常見(jiàn)應(yīng)用,結(jié)合實(shí)例形式詳細(xì)分析了java數(shù)組的基本定義、創(chuàng)建、遍歷、排序、查找等相關(guān)操作技巧與使用注意事項(xiàng),需要的朋友可以參考下
    2020-02-02
  • Springboot中yml文件不生效原因分析及解決

    Springboot中yml文件不生效原因分析及解決

    這篇文章給大家介紹了Springboot中yml文件不生效原因分析及解決方法,通過(guò)圖文給大家講解的非常詳細(xì),對(duì)大家解決問(wèn)題有一定的幫助,需要的朋友可以參考下
    2024-02-02
  • Java面試必考的關(guān)鍵字的用法匯總

    Java面試必考的關(guān)鍵字的用法匯總

    這篇文章主要為大家詳細(xì)介紹了Java中的幾種關(guān)鍵字相關(guān)知識(shí),本文比較適合剛?cè)肟覬ava的小白以及準(zhǔn)備秋招的大佬閱讀,需要的小伙伴快收藏起來(lái)吧
    2023-06-06

最新評(píng)論