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

Java詳細講解堆排序與時間復雜度的概念

 更新時間:2022年04月26日 11:20:53   作者:淡沫初夏Zz  
本文主要介紹了java實現(xiàn)堆排序以及時間復雜度,堆排序這種排序算法是我們經(jīng)常用到的,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

一、堆排序

1、什么是堆排序

(1)堆排序:堆排序(Heapsort)是指利用堆這種數(shù)據(jù)結構所設計的一種排序算法。堆積是一個近似完全二叉樹的結構,并同時滿足堆積的性質(zhì):即子結點的鍵值或索引總是小于(或者大于)它的父節(jié)點。

(2)堆是具有以下性質(zhì)的完全二叉樹:每個結點的值都大于或等于其左右孩子結點的值,稱為大頂堆;或者每個結點的值都小于或等于其左右孩子結點的值,稱為小頂堆。

2、堆排序思想

(1)將無需序列構建成一個堆,根據(jù)升序降序需求選擇大頂堆或小頂堆

(2)將堆頂元素與末尾元素交換,將最大元素"沉"到數(shù)組末端

(3)重新調(diào)整結構,使其滿足堆定義,然后繼續(xù)交換堆頂元素與當前末尾元素,反復執(zhí)行調(diào)整+交換步驟,直到整個序列有序

3、代碼實現(xiàn)

import java.util.Arrays;
public class Sort {
     //將任意數(shù)組進行原地堆排序
    public static void heapSort(int[] arr) {
        //把數(shù)組調(diào)整為最大堆,從最后一個非葉子節(jié)點開始下沉
        for (int i = (arr.length-1-1)/2; i >= 0; i--) {
            siftDown(arr,i,arr.length);
        }
        //將堆頂元素和最后一個元素交換
        for (int i = arr.length-1; i > 0 ; i--) {
            swap(arr,0,i);
            siftDown(arr,0,i);
        }
    }
   //下沉操作
    private static void siftDown(int[] arr, int i, int n) {
        while ((2 * i)+1 < n){
            int j = (2 * i) + 1;
            if(j+1<n && arr[j+1]>arr[j]){
               j = j+1;
            }
            if(arr[i] >= arr[j]){
                break;
            }else{
                swap(arr,i,j);
                i = j;
            }
        }
    }
     public static void main(String []args){
        int []arr = {7,6,7,11,5,12,3,0,1};
        System.out.println("排序前:"+ Arrays.toString(arr));
        heapSort(arr);
        System.out.println("排序后:"+Arrays.toString(arr));
    }
}

運行截圖:

二、時間復雜度分析

1、初始化建堆

初始化建堆只需要對二叉樹的非葉子節(jié)點由下至上,由右至左選取非葉子節(jié)點來調(diào)用adjusthead()函數(shù)。那么倒數(shù)第二層的最右邊的非葉子節(jié)點就是最后一個非葉子結點。

 假設高度為k,則從倒數(shù)第二層右邊的節(jié)點開始,這一層的節(jié)點都要執(zhí)行子節(jié)點比較然后交換;倒數(shù)第三層呢,則會選擇其子節(jié)點進行比較和交換,如果沒交換就可以不用再執(zhí)行下去了。高層也是這樣逐漸遞歸。

 那么總的時間計算為:s = 2^( i - 1 ) * ( k - i );其中 i 表示第幾層,2^( i - 1) 表示該層上有多少個元素,( k - i) 表示子樹上要下調(diào)比較的次數(shù)。

S = n - log(n) -1,所以時間復雜度為:O(n)

2、排序重建堆

每次重建意味著有一個節(jié)點出堆,所以需要將堆的容量減一。adjustheap()函數(shù)的時間復雜度k=log(n),k為堆的層數(shù)。所以在每次重建時,隨著堆的容量的減小,層數(shù)會下降,函數(shù)時間復雜度會變化。重建堆一共需要n-1次循環(huán),每次循環(huán)的比較次數(shù)為log(i),則相加為:log2+log3+…+log(n-1)+log(n)≈log(n!)。

所以時間復雜度為O(nlogn)

3、總結

初始化建堆的時間復雜度為O(n),排序重建堆的時間復雜度為nlog(n),所以總的時間復雜度為O(nlogn),空間復雜度為O(1)。

到此這篇關于Java詳細講解堆排序與時間復雜度的概念的文章就介紹到這了,更多相關Java堆排序與時間復雜度內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • IDEA中文亂碼的幾種常見解決方案

    IDEA中文亂碼的幾種常見解決方案

    IntelliJ IDEA 如果不進行相關設置,可能會導致控制臺中文亂碼、配置文件中文亂碼等問題,非常影響編碼過程中進行問題追蹤,所以本文給大家介紹了IDEA中文亂碼的幾種常見解決方案,需要的朋友可以參考下
    2025-04-04
  • java中synchronized關鍵字的3種寫法實例

    java中synchronized關鍵字的3種寫法實例

    synchronized是Java中的關鍵字,是一種同步鎖,下面這篇文章主要給大家介紹了關于java中synchronized關鍵字的3種寫法,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2021-11-11
  • Java依賴倒轉原則_動力節(jié)點Java學院整理

    Java依賴倒轉原則_動力節(jié)點Java學院整理

    這篇文章主要介紹了Java依賴倒轉原則的定義及問題由來解決方案,感興趣的朋友一起看看吧
    2017-08-08
  • Java中StringBuilder類的介紹與常用方法

    Java中StringBuilder類的介紹與常用方法

    StringBuilder是一個可變的字符串的操作類,我們可以把它看成是一個對象容器,下面這篇文章主要給大家介紹了關于Java中StringBuilder類的介紹與常用方法,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-12-12
  • 淺析java中asList的使用詳解

    淺析java中asList的使用詳解

    Java中的asList方法是數(shù)組工具類 Arrays中的一個靜態(tài)方法,asList()方法把數(shù)組轉換成集合時,不能使用其修改集合相關的方法,本文通過示例代碼給大家介紹java asList使用,感興趣的朋友一起看看吧
    2021-10-10
  • spring cloud gateway如何獲取請求的真實地址

    spring cloud gateway如何獲取請求的真實地址

    這篇文章主要介紹了spring cloud gateway如何獲取請求的真實地址問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • Java二叉搜索樹遍歷操作詳解【前序、中序、后序、層次、廣度優(yōu)先遍歷】

    Java二叉搜索樹遍歷操作詳解【前序、中序、后序、層次、廣度優(yōu)先遍歷】

    這篇文章主要介紹了Java二叉搜索樹遍歷操作,結合實例形式詳細分析了Java二叉搜索樹前序、中序、后序、層次、廣度優(yōu)先遍歷等相關原理與操作技巧,需要的朋友可以參考下
    2020-03-03
  • MyBatis基于pagehelper實現(xiàn)分頁原理及代碼實例

    MyBatis基于pagehelper實現(xiàn)分頁原理及代碼實例

    這篇文章主要介紹了MyBatis基于pagehelper實現(xiàn)分頁原理及代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-06-06
  • Java快速實現(xiàn)圖書管理基本功能

    Java快速實現(xiàn)圖書管理基本功能

    隨著網(wǎng)絡技術的高速發(fā)展,計算機應用的普及,利用計算機對圖書館的日常工作進行管理勢在必行,本篇文章涵蓋一個圖書管理系統(tǒng)的基本功能實現(xiàn)代碼,大家可以查缺補漏,提升水平
    2022-05-05
  • Maven 倉庫國內(nèi)鏡像源收藏(小結)

    Maven 倉庫國內(nèi)鏡像源收藏(小結)

    這篇文章主要介紹了Maven 倉庫國內(nèi)鏡像源收藏(小結),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-12-12

最新評論

赤水市| 瓦房店市| 广汉市| 扬中市| 沂水县| 安顺市| 吉木乃县| 昌宁县| 娱乐| 金山区| 光山县| 休宁县| 昌图县| 宣武区| 滦平县| 阿克陶县| 永靖县| 新竹市| 图木舒克市| 九江市| 阳高县| 阿克陶县| 南岸区| 长沙市| 任丘市| 淄博市| 玉环县| 奇台县| 东兰县| 扎鲁特旗| 图木舒克市| 贵阳市| 普洱| 庆云县| 湘潭县| 沾益县| 当涂县| 保山市| 凤庆县| 丰镇市| 苏尼特左旗|