演算法 第四版 之堆排序

2022-08-24 10:48:09 字數 1131 閱讀 8180

堆排序是建立在堆的基礎上的, 了解堆排序我們得先了解二叉堆. 二叉堆是以二叉樹為基礎的, 當一棵二叉樹的每個結點都大於等於它的兩個子節點數時, 它被稱為堆有序. 我們可以很容易的理解出, 它的根節點是最大節點

二叉堆可以用指標和陣列兩種方式表示, 本文用的是陣列的方式.

我們在堆中有兩種操作方法, 一種叫做上浮, 一種叫做下潛, 上浮是指將節點n和它的父節點進項比較, 如果它的父節點小於它, 則節點n與它的父節點交換, 然後在繼續與它交換後的父節點進行比較, 知道它的父節點不小於它為止. 而下潛則相反, 節點n 將於它的兩個子節點比較, 當它的子節點大於它時, 它將於較大的那個子節點進行交換, 以此類推, 因為本文重點講的是堆排序, 只用到了下潛, 所以只給出下潛**:

1

public

static

void sink(int a, int i, int n)

7if(a[i] >a[j])

8break;9

exch(a, i, j);

10 i =j;11}

12 }

然後我們講一下堆排序. 堆排序分為兩個步驟, 乙個是將**進行堆有序化, 從第n/2個結點到第乙個結點分別進行下潛操作, 接著進行下沉排序, 將根節點與最後乙個結點進行交換, 在將排除了最後乙個數的陣列對根節點作下潛操作, 然後將根節點和第n-1個結點交換, 以此類對, 知道到了最後乙個結點

附上**:

1

public

static

void hashsort(int a, int

n) 5

for(int i = n-1; i >= 0; i--)

9 }

我的**和書上的有些不同, 因為我的**是從0開始的, 而書上的是從1開始的, 這只是我的個人習慣, 按照書上說的, 從一開始更加符合大多數程式設計師的習慣, 也更加方便

堆排序的時間複雜度為o(nlogn)

《演算法(第四版)》排序 堆排序

1.什麼是堆?講堆排序之前,先了解一下什麼是堆。堆其實相當於一種資料結構,它的本質是一種陣列物件,但是它裡面的內同又是一顆完全二叉樹結構,它的特點是父節點的值大於 或小於 兩個子節點的值,常常用於優先佇列 堆排序等。堆在陣列中的索引有如下的特點。陣列索引為k的元素,它的父節點的索引為 k 2 下取整...

《演算法(第四版)》排序 模板

本書對排序類演算法有乙個模板,包括了以下幾種方法 1 sort 這個方法裡面實現的就是排序的演算法 2 less 這個方法裡是利用了comparable介面裡的compareto方法,其中compareto方法對於本物件與傳入的比較物件小於,等於,大於,分別返回負數,0,正數 這個方法如果compa...

《演算法(第四版)》排序 希爾排序

由 插入排序 可知,它是一種不穩定的演算法,當序列已經接近有序時,排序速度較快,但是如果最小的在最後面,那可能需要最小的交換了n 1次才能換到最前面。希爾排序在插入排序的基礎上進行了改進,交換不相鄰的元素,以對陣列的區域性進行排序,並最終用插入排序將區域性有序的陣列排序,具體做法如下。1.假設陣列長...