#include using namespace std;
int n = 10;//元素個數
int b[11] = ;//定義全域性陣列
void shift_down(int i)
else flag = 1; //下乙個移動的結點是i,即沒有被更改
}//函式原理:對傳入的i進行下移,i移動到比它的兒子都小為止(最壞情況是移動到葉),否則他與左右兒子中的較小值進行交換
return ;
}int deletemax()
void heap_sort()
void selection_sort(int r,int n)
}int main()
/***
heap_sort:
9 2 7 3 1 6 8 4 5 10
1 2 3 4 5 6 7 8 9 10
selection_sort:
5 8 3 1 2 9 7 6 4 10
1 2 3 4 5 6 7 8 9 10
***/
排序(5) 堆排序
1.堆 堆這種資料結構其實就是完全二叉樹,堆分為兩種,大頂堆和小頂堆。因此,堆是具有下列性質的完全二叉樹 每個節點的值都大於或等於其左右孩子節點的值稱為大頂堆 每個節點的值都小於或等於其左右孩子節點的值稱為小頂堆。2.堆排序演算法 堆排序就是利用堆這種資料結構進行排序的方法。它的基本思想是 將待排序...
排序演算法 5 堆排序
這篇部落格從以下幾個方面來說 什麼是最大堆以及 實現 堆排序基礎 一次優化 提高效率 二次優化 原地堆排序,無需額外空間 1.什麼是最大堆以及 實現 這裡可以參考言簡意賅的部落格 堆與最大堆 2.堆排序基礎 import com.heap.maxheap import utils.createran...
排序演算法5 堆排序
堆排序是利用堆這種資料結構進行的排序。堆通常使用一維陣列來實現,是一種近似完全二叉樹的結構。堆排序分為大根堆和小根堆。堆排序滿足這樣的乙個特性 大根堆父節點的值總是大於子節點,小根堆的父節點值總是小於子節點。我們在拿到乙個陣列時,首先將它構造成為乙個大根堆 小根堆,這個過程我們叫做建堆。然後將根節點...