小白演算法 堆排序(C語言實現)

2021-10-11 08:46:23 字數 1077 閱讀 1866

設有n個元素的序列k1,k2,…,kn,當且僅當滿足下述關係之一時,被稱為堆。

1.ki<=k2i且ki<=k2i+1,滿足這種條件的堆稱為小頂堆。

2.ki>=k2i且ki>=k2i+1,滿足這種條件的堆稱為大頂堆。

拋開定義,堆可以看作是一棵樹的陣列物件,樹中每個節點都不大於(小頂堆)或不小於(大頂堆)父節點。

下面以兩幅圖來更好地理解「堆"(上圖為大頂堆,下圖為小頂堆)

(這裡利用小頂堆進行堆的建立和調整)

首先建立堆,即把待排序的序列轉換成堆的形式,這個過程就是乙個反覆篩選的過程。

之後將根節點與最後乙個節點交換。

交換之後會打亂堆的規律,需要對前(n-1)個節點進行調整,使之重新成為堆。

之後交換根節點與倒數第二個節點。

重複調整,直到序列有序為止。

#include

#include

#include

#define max 100

int array[max]

;int

adjust

(k,m)

//調整堆

else

} array[i]

=t;}

intsiftsort

(int n)

//堆排序

for(i=n;i>=2;

--i)

}void

main()

siftsort

(count)

;printf

("排序結果為:\n");

c語言 實現堆排序演算法

今天在 演算法導論 第二版看完了 堆排序 演算法,就順便用c語言實現了一下。堆排序演算法的核心思想,使用一種二叉堆的資料結構來儲存資料,其中二叉堆 最小二叉堆 的主要性質為 1 父節點小於所有的子節點的數值 注 最小堆 2 二叉堆為滿二叉樹 其中堆排序演算法,主要包括一下幾個主要的部分 1 保持堆特...

排序演算法的C語言實現 堆排序

堆 優先佇列 可以用於花費nlogn 時間的排序,基於該想法的演算法叫做堆排序。因為堆的根總是最大的或者最小的,所以我們可以先將輸入陣列轉換為最大或者最小堆,然後刪除最大 最小值 也就是刪除根。這在二叉堆的介紹中已經實現了。一種方法是將刪除的元素放入另乙個陣列,但是這樣會浪費一倍的記憶體空間。由於每...

經典排序演算法 堆排序(C語言實現)

堆排序的基本原理為將待排序序列構造成乙個大根堆,此時,整個序列的最大值就是堆頂的根節點。將其與末尾元素進行交換,此時末尾就為最大值。然後將剩餘n 1個元素重新構造成乙個大根堆,重複上述操作,最終序列為有序。備註 大根堆是每個結點的值都大於或等於其左右孩子結點的值 小根堆是每個結點的值都小於或等於其左...