排序演算法之堆排序

2021-08-20 23:49:41 字數 980 閱讀 6716

我們利用了大頂堆。什麼是大頂堆。

大頂堆:(1)堆是一棵完全二叉樹(2)大頂堆的根節點的值是最大值。
也就是說所有根節點和它的子樹相比是最大的

我們從最下面的非根節點找齊,和它的左右子樹比,經過交換等操作使得根節點儲存得值始終是最大的

這樣一層一層直到最高的頂點完成排序,那麼頂點便是所有數中最大的數。得到最大的數後我們把它和最後的乙個葉子節點交換

這樣最大的數的序號就是最後乙個數,我們再調整這個堆為大頂堆,但是這時我們調整的是除了最後乙個數的堆,因為最後乙個數已經是最大的了,不需要排序了。調整後再交換當前最大數(也就是堆頂),使得每次交換後未排序的順序表中的最大值會放到未排序順序表的最後,下次這個數將不參與排序。這樣一直迴圈到最後乙個數便結束。

**裡注釋寫的很全:

package heap;

public class heap ;//這裡第乙個數要填0,因為完全二叉樹對於序號要求很高。這樣才能利用完全二叉樹的序號進行操作

int i=0;

int swap;

for (i=(heap.length-1)/2;i>0;i--)

for (i=heap.length-1;i>1;i--)

for (int f : heap)

}//每次方法的執行相當於乙個非葉子節點完成排序

public static void heapadjust(int heap,int s,int m)

heap[s]=heap[j];//如果需要交換則進行賦值交換

s=j;//迴圈結束後賦值用

}heap[s]=temp;

}public static void swap(int heap,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 的幾種常見排序方法。最小堆的講解以及最小堆元素的插入和刪除參見最小堆操作。以下繼續引用以...