堆排序 及Java實現

2021-09-20 21:21:46 字數 1377 閱讀 2698

在學習堆排序之前需要了解什麼是堆?

堆是一顆完全二叉樹,什麼是完全二叉樹?

若二叉樹的深度為h,除了第h層外,其他各層的節點數都達到最大個數,第h層所有的節點都連續集中在最左邊,這就是完全二叉樹。

堆分為兩種:大根堆和小根堆

大根堆:在完全二叉樹的基礎上,根節點是最大的值,每個父節點都比自己的兩個子結點大,

小根堆:和大根堆相反,根節點是最小的值,並且每個子節點都比父節點大

根據堆的特點進行編寫,先將一組擁有n個元素的資料構建成大根堆或者小根堆(我按照大根堆進行介紹,小根堆是一樣的思想),再將根節點上的數和堆最後一位資料進行互換,此時,第n位的數就是整個序列中最大的數。然後再將前n-1為元素進行構建形成大根堆,再將根節點與第n-1位資料進行互換,得到第二大資料,此時倒數兩個資料無疑是有序的;然後將前n-2個資料構建成大根堆,依次迴圈直到剩下一位元素,則說明第一位後面的數字都是有序的,並且比第一位數大,此時排序完成。

構建大根堆或小根堆

迴圈:根節點和末尾節點進行互換,再構成大根堆或小根堆

排序完成

構建大根堆的過程:↓↓↓

//肯定i是最大值的下標

if(array[i]

> tmp)

else

} array[start]

= tmp;

}public

static

void

heapsort

(int

array)

//for迴圈結束表示第乙個大根堆已經建立

//時間複雜度:o(n*log2n)

int tmp =0;

//為交換位置所設定的臨時變數

for(

int i =

0; i <= array.length-

1; i++

)}

排序演算法之堆排序及Java實現

選擇排序 直接選擇排序,堆排序 交換排序 氣泡排序,快速排序 插入排序 直接插入排序,希爾排序 歸併排序 桶式排序 基數排序 堆排序是利用堆這種資料結構而設計的一種排序演算法,堆排序是一種選擇排序。堆是具有以下性質的完全二叉樹 每個結點的值都大於或等於其左右孩子結點的值,稱為大頂堆 或者每個結點的值...

java 實現最大堆及堆排序

從0開始的最大堆 通過插入排序的思想進行了優化 實現了增刪改查 從0開始的最大堆 通過插入排序的思想進行了優化 實現了增刪改查 author 葉葉葉 param public class maxheap public maxheap int capacity public int size publ...

java實現堆排序

許多應用要用堆,比如,優先佇列,即佇列的擴充,佇列的每個元素增加乙個稱為優先順序的字段,優先佇列可以是線性結構的,但要有較高的效率,應把它組織成堆結構。元素入隊是,相當於執行堆的插入演算法 但在隊頭每次刪除的總是隊頂具有最大優先順序的元素,因此可以把它稱為最大優先順序佇列。再比如,堆排序是選擇排序中...