排序演算法之堆排序

2021-10-22 22:28:01 字數 1130 閱讀 5285

堆排序是指利用堆這種資料結構設計的一種排序演算法,堆分為大頂堆和小頂堆,他是乙個近似完全二叉樹的結構。

大頂堆

每個節點的值都大於或者等於它的左右節點的值。

小頂堆

每個節點的值都小於或者等於它的左右節點的值。

性質

大頂堆:arr[i] >=arr[i * 2 + 1],arr[i] >= arr[i * 2 + 2]

小頂堆:arr[i] <= arr[i * 2 + 1],arr[i] <= arr[i * 2 + 2]

堆排序的步驟:

建堆將堆首和堆尾交換

將堆的長度-1,調整堆的順序,將最大值或者最小值放入堆首

重複第二步,直至堆的長度為1

下面是堆排序的實現

public

class

heapsort

for(

int i =

1;i < arr.length; i++

)int heapsize = arr.length;

swap

(arr,0,

--heapsize)

;while

(heapsize >0)

}private

static

void

heapify

(int

arr,

int index,

int heapsize)

}private

static

void

heapinsert

(int

arr,

int index)

}private

static

void

swap

(int

arr,

int i,

int j)

}

大頂堆,小頂堆的這種思想是非常好用的,有一些演算法題目都是應用的這種思想,以後的部落格我也會寫一些這樣的題目。

排序演算法之堆排序

前言 今天我來介紹下堆排序,在寫堆排序 之前,我們要知道堆的概念!堆的定義 n個關鍵字序列kl,k2,kn稱為 heap 當且僅當該序列滿足如下性質 簡稱為堆性質 1 ki k 2i 且ki k 2i 1 1 i n 當然,這是小根堆,大根堆則換成 號。k i 相當於二叉樹的非葉子結點,k 2i 則...

排序演算法之堆排序

堆排序演算法是選擇排序的一種,該演算法只是通過堆,最大堆 或者最小堆選擇出乙個待排序序列中的最大值,或者最小值。要想實現堆排序演算法,就需要構建什麼堆,這裡也最小堆為例。說明什麼是堆,怎麼構建乙個堆。假設待排序序列為a n 為乙個陣列。陣列的長度為n 陣列下標為 0,1,2,i,2i,2i 1 n ...

排序演算法之堆排序

宣告 本博文 為樓主親自編寫並測試,其它內容引用至我一直很崇拜的牛人morewindows。他對排序演算法的講解通俗易懂,給人一種耳目一新的感覺。堆排序與快速排序 歸併排序 一樣都是時間複雜度為o n logn 的幾種常見排序方法。最小堆的講解以及最小堆元素的插入和刪除參見最小堆操作。以下繼續引用以...