日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

堆排序的基本概念和基本思路

發布時間:2023/12/15 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 堆排序的基本概念和基本思路 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一 堆排序基本介紹

1 堆排序是利用堆這種數據結構而設計的一種排序算法,堆排序是一種選擇排序, 它的最壞、最好、平均時間復雜度均為 O(nlogn), 它也是不穩定排序。

2 堆是具有以下性質的完全二叉樹:每個結點的值都大于或等于其左右孩子結點的值,?這種情況稱為大頂堆,注意:沒有要求結點的左孩子的值和右孩子的值的大小關系。

3 每個結點的值都小于或等于其左右孩子結點的值,?這種情況稱為小頂堆。

4 大頂堆舉例說明

5 小頂堆舉例說明

6 一般升序采用大頂堆, 降序采用小頂堆。

二 堆排序基本思想

1 將待排序序列構造成一個大頂堆。

2 此時,整個序列的最大值就是堆頂的根節點。

3 將其與末尾元素進行交換, 此時末尾就為最大值。

4 然后將剩余 n-1 個元素重新構造成一個堆, 這樣會得到 n 個元素的次小值。 如此反復執行, 便能得到一個有序序列了。

可以看到在構建大頂堆的過程中, 元素的個數逐漸減少,最后就得到一個有序序列了。

三 堆排序步驟圖解

1 要求

數組 {4,6,8,5,9} , 要求使用堆排序法, 將數組升序排序。

2?算法

步驟一 構造初始堆。

將給定無序序列構造成一個大頂堆。(一般升序采用大頂堆,降序采用小頂堆)。

原始的數組 [4, 6, 8, 5, 9]

a 假設給定無序序列結構如下。

b 此時我們從最后一個非葉子結點開始(arr.length/2-1=5/2-1=1,也就是下面的 6 結點),從左至右,從下至上進行調整。

c 找到第二個非葉節點 4,由于[4,9,8]中 9 元素最大,4 和 9 交換。

d 這時,交換導致了子根[4,5,6]結構混亂,繼續調整,[4,5,6]中 6 最大,交換 4 和 6。

此時,我們就將一個無序序列構造成了一個大頂堆。

步驟二 將堆頂元素與末尾元素進行交換,使末尾元素最大。然后繼續調整堆,再將堆頂元素與末尾元素交換,得到第二大元素。如此反復進行交換、重建、交換。

a 將堆頂元素 9 和末尾元素 4 進行交換。

b 重新調整結構,使其繼續滿足堆定義。

c 再將堆頂元素 8 與末尾元素 5 進行交換,得到第二大元素 8。

d 后續過程,繼續進行調整,交換,如此反復進行,最終使得整個序列有序。

四?總結

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

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

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

總結

以上是生活随笔為你收集整理的堆排序的基本概念和基本思路的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。