堆疊排序演算法

2021-07-16 09:54:21 字數 854 閱讀 1505

堆排序

維護的二叉樹是一顆完全二叉樹,大頂堆用來公升序排序,要求父節點大於等於左右子節點。而小丁堆用來降序排序,要求父節點小於等於左右子節點。

/* 堆排序

* 如果按公升序排序,就維護最大堆,降序就維護最小堆

* 這裡我們按公升序講

* 每次把最大元素放在堆頂,然後交換陣列的頭尾兩個元素,這樣陣列的最後乙個

* 元素就是最大的,然後依次找出剩下的元素中的最大元素,交換,這樣就會得到

* 乙個公升序的陣列

* 所以堆排序的時間複雜度為n*logn

* */

public class main

/* 這裡是將最大的元素找出來,放在堆頂

* 這裡logn次

*/static void fun(int a, int s, int m)

// 將較大的子節點值賦給父節點

a[s] = a[j];

s = j; //為下一次找下一棵子樹的較大結點做準備

} //最後賦值回temp該去的結點位置

a[s] = temp;

} /* 找n次

* */

static void sort(int a)

//最大的元素已找出,繼續找剩下的元素的最大元素,依次迴圈即可

//z這裡循壞n次

for(int i=a.length; i>=1; i--)

}

public static void main(string args);

sort(a);

for(int i=0; i我們可以很輕鬆的看出堆排序的最好,最壞,平均時間複雜度都為o(n * logn),空間複雜度為o(1),排序演算法不穩定。

排序演算法之堆疊排序

排序 堆排序 大根堆 大頂堆 1.小根堆 若根節點存在左子女則根節點的值小於左子女的值 若根節點存在右子女則根節點的值小於右子女的值。2.大根堆 若根節點存在左子女則根節點的值大於左子女的值 若根節點存在右子女則根節點的值大於右子女的值。3.結論 1 堆是一棵完全二叉樹 如果公有h層,那麼1 h 1...

演算法總結 堆疊

先說stack的題目 stack的實現 鍊錶,陣列 題目 1 簡單的 min stack,乙個陣列實現三個stack 2 經典的stack問題 經典漢諾塔問題,逆波蘭式計算或者產生逆波蘭式,簡化檔案路徑,驗證括號對是否合法,找出最長有效括號 貪心 stack求解 3 涉及tree的遍歷問題 tree...

堆疊演算法筆記

堆疊都是一種資料項按序排列的資料結構,只能在一端 稱為棧頂 top 對資料項進行插入和刪除。堆 資料結構 堆可以被看成是一棵樹,如 堆排序。進出順序隨意 棧 資料結構 一種先進後出的資料結構。可以看到sort heap時,必須先是乙個堆 兩個特性 1 最大元素在第乙個 2 新增或者刪除元素以對數時間...