堆排序是指利用堆這種
資料結構
所設計的一種
排序演算法
,它是選擇排序的一種。可以利用
陣列的特點快速定位指定索引的元素。堆分為大頂堆和小頂堆,是
完全二叉樹
。大頂堆的要求是每個節點的值都不大於其父節點的值
。在對陣列從小到大排序時,需要使用的就是大頂堆,根據大頂堆的要求可知,最大的值一定在堆頂。
以 int
array=; 為例,將陣列看做乙個堆進行操作。
從最後乙個非葉子結點array[4](即10/2-1=4)開始調整堆,保證每個非葉子節點的值都大於其子節點。
**
#include void compare(int *array,int pos,int heap_size)
if(right <= heap_size && array[right]>array[largest])
if(largest!=pos)
}void heap_sort(int *array,int len)
}while(1)
compare(array,0,heap_size);
}} int main(void)
; heap_sort(array,10);
int i;
for(i=0;i<10;i++)
printf("\n");
}
c語言堆排序
再看資料結構書的時候,發現堆排序以前根本不懂,以前理解的不是很深刻,對演算法也是一知半解,萬一找工作碰到這樣的筆試題或者面試題,豈不是over了!先梳理一下堆排序的知識吧 堆排序只需要乙個記錄大小的輔助空間,每個待排序的記錄僅占有乙個儲存空間。1 堆是完全二叉樹,但不一定是滿二叉樹 2 因為堆不滿足...
堆排序(c語言)
堆排序的基本思想是 將待排序序列構造成乙個大頂堆,此時,整個序列的最大值就是堆頂的根節點。將其與末尾元素進行交換,此時末尾就為最大值。然後將剩餘n 1個元素重新構造成乙個堆,這樣會得到n個元素的次小值。如此反覆執行,便能得到乙個有序序列了 構建初始堆 公升序建大堆,降序建小堆 a.給定乙個無序陣列 ...
C語言堆排序
給定乙個堆,如果調整為最大堆,從0開始,後面的葉子結點不用調整,即從len 2開始調整 關鍵是乙個調整函式,需要遞迴的向下進行調整 完整 define crt secure no warnings include include void printarray int arr,int len pri...