c語言 實現堆排序演算法

2021-06-16 10:08:26 字數 702 閱讀 9642

今天在《演算法導論》第二版看完了「堆排序」演算法,就順便用c語言實現了一下。

堆排序演算法的核心思想,使用一種二叉堆的資料結構來儲存資料,其中二叉堆(最小二叉堆)的主要性質為:

1 父節點小於所有的子節點的數值(注:最小堆)

2 二叉堆為滿二叉樹

其中堆排序演算法,主要包括一下幾個主要的部分:

1 保持堆特性  maxheapify 函式實現

2 建立堆  buildheap函式實現

3 堆排序實現  heapsort函式實現

具體的c語言實現**如下:

功能函式:

#include "heap.h"

#includeint parent(int i)

int left(int i)

int right(int i)

void exchange(int *a ,int *b)

void maxheapify(heap heap, int i)

}void buildheap(heap heap)

void heapsort(heap heap)

}

主函式 main.c

#include#include "heap.h"

#include#includeint main()

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

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

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

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

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

設有n個元素的序列k1,k2,kn,當且僅當滿足下述關係之一時,被稱為堆。1.ki k2i且ki k2i 1,滿足這種條件的堆稱為小頂堆。2.ki k2i且ki k2i 1,滿足這種條件的堆稱為大頂堆。拋開定義,堆可以看作是一棵樹的陣列物件,樹中每個節點都不大於 小頂堆 或不小於 大頂堆 父節點。下...