附加空間: 乙個儲存最大記錄的空間
是否是穩定的排序方法: 不穩定
#include "stdio.h"
#define maxsize 10
typedef int keytype;
typedef struct recordtype;
typedef struct table;
void
swap
(table * tab,
int i,
int max)
void
heapify
(table * tab,
int i,
int length)
//如果右兒子大於根節點的值,則更新最大記錄的下標
if(right>r[right]
.key>tab-
>r[max]
.key)
//如果確實發生下標更新,則開始更新最大的記錄,
if(i != max)
}void
buildheap
(table * tab,
int length)
}void
heapsort
(table * tab)
}void
inputdata
(table * tab)
}void
show
(table * tab)
}void
main()
執行截圖 資料結構 排序(堆排序)
最小堆的特性說明 即任何一非葉節點的值不大於其左右孩子節點的值。堆排序最適合取topn的資料 include myheap.h int myswap int src,int desc 調整樹 arr 需要排序的陣列 root 根節點 size 樹的大小 int changetree int arr,...
資料結構 排序 堆排序
堆排序是選擇排序中的一種,選擇排序的思想是在未排序的數列中選擇乙個最大或者最小的資料加入已排序序列,大根堆這個結構的根節點就是最大值,因此會大大方便選擇。在完全二叉樹中,根 左,右 手動建堆 第一步 順序建立一棵樹 第二步 檢查非葉子結點是否滿足 根 左,右,不滿足就將當前節點與最大的乙個孩子互換 ...
資料結構排序 堆排序
堆排序就是利用了最大堆 或最小堆 堆頂記錄的關鍵字最大 或最小 這一特徵,使得在當前無序區中選取最大 或最小 關鍵字變得簡單。以最大堆為例,它的基本思想就是 先將初始檔案r 1.n 建成乙個最大堆,此堆為初始的無序區 再將關鍵字最大的記錄r 1 即堆頂 和無序區的最後乙個記錄r n 交換,由此得到新...