堆排序
堆排序是在排序過程中,將向量中儲存的資料看成一顆完全二叉樹,利用完全二叉樹中雙親結點和孩子結點之間的內在關係來選擇關鍵字的最小的記錄,即待排序記錄中仍採用向量陣列的方式儲存,並非採用樹的儲存結構,二僅僅是採用完全二叉樹的順序結構的特徵進行分析而已。
二叉樹的順序表示, 每個結點最多有兩個孩子結點(left, right), 這樣表示出來的二叉樹是一顆完全二叉樹。如果父結點的下標為i, 則其左孩子下標為 2i+1, 右孩子下標為2i+2;如果乙個結點的下標為j, 則其父結點的下標為(j-1)/ 2。
#include
#include
#include
#define number 15
void
oneadjust
(int
* arr,
int len,
int root)
if(arr[max]
arr[root]
=arr[max]
; root=max;
left=
2*root+1;
right=
2*root+2;
} arr[root]
=tmp;
}void
createheap
(int
* arr,
int len)
//建大根堆
}void
swap
(int
* a,
int* b)
void
heapsort
(int
* arr,
int len)
//堆排序
}int
main()
;for
(int i=
0;i++i)
printf
("\n");
heapsort
(arr,number)
;for
(int i=
0;i++i)
printf
("\n");
return0;
}
執行結果如下: c語言堆排序
再看資料結構書的時候,發現堆排序以前根本不懂,以前理解的不是很深刻,對演算法也是一知半解,萬一找工作碰到這樣的筆試題或者面試題,豈不是over了!先梳理一下堆排序的知識吧 堆排序只需要乙個記錄大小的輔助空間,每個待排序的記錄僅占有乙個儲存空間。1 堆是完全二叉樹,但不一定是滿二叉樹 2 因為堆不滿足...
堆排序(c語言)
堆排序的基本思想是 將待排序序列構造成乙個大頂堆,此時,整個序列的最大值就是堆頂的根節點。將其與末尾元素進行交換,此時末尾就為最大值。然後將剩餘n 1個元素重新構造成乙個堆,這樣會得到n個元素的次小值。如此反覆執行,便能得到乙個有序序列了 構建初始堆 公升序建大堆,降序建小堆 a.給定乙個無序陣列 ...
C語言 堆排序
堆排序是指利用堆這種 資料結構 所設計的一種 排序演算法 它是選擇排序的一種。可以利用 陣列的特點快速定位指定索引的元素。堆分為大頂堆和小頂堆,是 完全二叉樹 大頂堆的要求是每個節點的值都不大於其父節點的值 在對陣列從小到大排序時,需要使用的就是大頂堆,根據大頂堆的要求可知,最大的值一定在堆頂。以 ...