亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java排序算法之堆排序如何實現

發布時間:2021-11-24 11:10:35 來源:億速云 閱讀:156 作者:小新 欄目:開發技術

這篇文章主要介紹了Java排序算法之堆排序如何實現,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

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

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

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

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

堆排序步驟

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

堆排序代碼實現(大頂堆)

public class HeapSort {
    private static void heapSort(int[] arr) {
        // 構造初始堆(大頂堆),從第一個非葉子節點開始調整,左右孩子節點中較大的交換到父節點中
        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) {// 如果子節點大于父節點,將子節點值賦給父節點
                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排序算法之堆排序如何實現”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

新乐市| 名山县| 湖南省| 平安县| 綦江县| 大城县| 毕节市| 岗巴县| 成武县| 大石桥市| 于都县| 旌德县| 柞水县| 兖州市| 吉安市| 老河口市| 邯郸县| 抚宁县| 华安县| 仙桃市| 青神县| 武隆县| 高要市| 青川县| 新乡市| 苍山县| 和田市| 长顺县| 连江县| 景泰县| 高州市| 雷山县| 和顺县| 平谷区| 连平县| 大连市| 常宁市| 清原| 鹤壁市| 永川市| 彩票|