堆排序聽著和圖有關係,但是其實只是引用樹的知識,也可以理解為把陣列理解為乙個滿二叉樹(說法有問題,應該是左邊滿的二叉樹)
這樣就可以有這樣的乙個定義就是n節點的子節點是2n+1和2n+2兩個節點。
以公升序為例
直接貼出源**
#include
using namespace std;
void
change
(int arr,
int s,
int e)
//這個函式用於維護堆,使得每一次交換之後都會使得0是最大點}}
void
heap_sort
(int arr,
int e)
for(
int i = e -
1; i >
0; i--
)//找出最大點然後放到最後面去,然後維護陣列
}int
main()
;int len =
(int
)sizeof
(arr)
/sizeof
(*arr)
;heap_sort
(arr, len)
;for
(int i =
0; i < len; i++
) cout << arr[i]
<<
' ';
return0;
}
堆排序 資料結構
堆排序前不久,我們資料結構剛剛學習到,堆排序。個人覺得堆排序比較好,因為比較穩定的時間複雜度。n logn 時間複雜度。如果想要學會堆排序,需要知道,二叉樹。堆就和二叉樹長的一模一樣。下面說說堆排序 堆排序的思想就是用到堆的特點,大頂堆,小頂堆,簡單說,大頂堆就是 這一棵完全二叉樹的任意乙個節點都滿...
資料結構 堆排序 堆排序 Heap Sort
堆排序是一種選擇排序,其時間複雜度為o nlogn 堆的定義 n個元素的序列當且僅當滿足下列關係之一時,稱之為堆。情形1 ki k2i 且ki k2i 1 最小化堆或小頂堆 情形2 ki k2i 且ki k2i 1 最大化堆或大頂堆 其中i 1,2,n 2向下取整 若將和此序列對應的一維陣列 即以一...
資料結構 堆排序
include include void maxheapify int a,int length,int i void buildmaxheapify int a,int length void heapsort int a,int length void main void printf heap...