最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

二叉堆是完全二叉樹或者是近似完全二叉樹。
二叉堆滿足二個特性︰

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

2.每個結點的左子樹和右子樹都是一個二叉堆(都是最大堆或最小堆)。

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

堆排序步驟

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

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

public class HeapSort {
    private static void heapSort(int[] arr) {
        // 構造初始堆(大頂堆),從第一個非葉子節(jié)點開始調整,左右孩子節(jié)點中較大的交換到父節(jié)點中
        for (int i = arr.length / 2 - 1; i >= 0; i--) {
            heapAdjust(arr, i, arr.length);
        }
        // 調整堆結構,交換堆頂元素與末尾元素
        for (int j = arr.length - 1; j > 0; j--) {
            swap(arr, 0, j);// 將堆頂元素與末尾元素進行交換
            heapAdjust(arr, 0, j);// 重新對堆進行調整
        }
    }
 
    private static void swap(int[] arr, int a, int b) {
        int temp = arr[a];
        arr[a] = arr[b];
        arr[b] = temp;
    }
 
    // 調整大頂堆
    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]) {// 如果左子結點小于右子結點,index指向右子結點
                index += 1;
            }
            if (arr[index] > temp) {// 如果子節(jié)點大于父節(jié)點,將子節(jié)點值賦給父節(jié)點
                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));
    }
}

時間復雜度:O(nlogN)

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

相關文章

  • 淺談foreach寫失效的問題

    淺談foreach寫失效的問題

    下面小編就為大家?guī)硪黄獪\談foreach寫失效的問題。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-07-07
  • IDEA常量字符串過長問題及解決方案

    IDEA常量字符串過長問題及解決方案

    在編譯Java項目時遇到“常量字符串過長”錯誤,可以通過修改編譯器設置解決,具體方法是進入IDE的設置(File>>Settings>>Build, Execution, Deployment>>Compiler>>Java Compiler),將使用的編譯器更改為Eclipse,如果問題依舊
    2024-10-10
  • Spring mvc JSON數(shù)據(jù)交換格式原理解析

    Spring mvc JSON數(shù)據(jù)交換格式原理解析

    這篇文章主要介紹了Spring mvc JSON數(shù)據(jù)交換格式原理解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-03-03
  • SpringCloud之consul服務注冊與發(fā)現(xiàn)、配置管理、配置持久化方式

    SpringCloud之consul服務注冊與發(fā)現(xiàn)、配置管理、配置持久化方式

    這篇文章主要介紹了SpringCloud之consul服務注冊與發(fā)現(xiàn)、配置管理、配置持久化方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-03-03
  • SpringBoot中Bean拷貝及工具類封裝的實現(xiàn)

    SpringBoot中Bean拷貝及工具類封裝的實現(xiàn)

    本文主要介紹了SpringBoot中Bean拷貝及工具類封裝的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-05-05
  • 淺談springboot如何保證多線程安全

    淺談springboot如何保證多線程安全

    這篇文章主要介紹了springboot如何保證多線程安全,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • 在Maven下代理服務器設定的方式

    在Maven下代理服務器設定的方式

    今天小編就為大家分享一篇關于在Maven下代理服務器設定的方式,小編覺得內容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • maven中添加memcached.jar的配置步驟

    maven中添加memcached.jar的配置步驟

    在Java項目中使用Maven管理依賴時,如果需要添加??memcached.jar??依賴,可以通過本文介紹的步驟進行配置,文章通過代碼示例講解的非常詳細,對大家的學習或工作有一定的幫助,需要的朋友可以參考下
    2024-12-12
  • 從Springboot項目中下載文件的具體過程

    從Springboot項目中下載文件的具體過程

    最近在做一個臨時的項目,APP端在檢測到程序有更新時,需要去后臺下載新的安裝包,接下來通過本文給大家分享從Springboot項目中下載文件的具體過程,感興趣的朋友一起看看吧
    2021-07-07
  • 老生常談Java字符串進階(必看篇)

    老生常談Java字符串進階(必看篇)

    下面小編就為大家?guī)硪黄仙U凧ava字符串進階(必看篇)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06

最新評論

唐海县| 织金县| 怀宁县| 东城区| 湘潭市| 伊宁市| 黄冈市| 绥宁县| 伊金霍洛旗| 阜新市| 姜堰市| 大城县| 东城区| 特克斯县| 德惠市| 缙云县| 灵宝市| 昆明市| 思南县| 德州市| 淮南市| 湘阴县| 包头市| 大荔县| 舟山市| 融水| 长治县| 玉溪市| 平阴县| 农安县| 玉田县| 丰顺县| 安乡县| 沙田区| 金昌市| 镇江市| 揭西县| 晋城| 石首市| 泰宁县| 社旗县|