//最小堆的特性說明:即任何一非葉節點的值不大於其左右孩子節點的值。
//堆排序最適合取topn的資料
#include "
myheap.h
"int myswap(int *src, int *desc)
//調整樹
//@arr 需要排序的陣列
//@root 根節點
//@size 樹的大小
int changetree(int *arr,int root, int
size)
if (rightnode >size)
else
//調整堆
if (arr[root - 1] > arr[pos - 1
])
return0;
}//建立堆int buildheap(int *arr)
return0;
}//堆排序//
@source 無序陣列
//@desc 最終生成top n陣列
//@size 無序陣列的長度
//注意:desc資料就是從source中直接擷取n個資料,source不能再有desc的資料,是擷取,而不是拷貝
int heapsort(int *source,int *desc,int
size)
}//注意:堆排序只能獲取海量陣列前topn的資料,但是top n的陣列不是有序的,繼續才能獲取完整的序列
//推薦:小資料完全有序,不建議使用堆排序,經過我的測試,似乎速度並不快,可以使用快速排序
for ( i = k-1; i > 0; i--)
return0;
}
#define _crt_secure_no_warnings#include#include
#include
#include
#include
"myheap.h
"#define numcount 100*10000
int gettimestr(char *buf)
; sprintf(timestr,
"%04d-%02d-%02d %02d:%02d:%02d
", iyear, imon, iday, ihour,
imin, isec);
strcpy(buf, timestr);
return0;
}//隨機產生100萬資料
資料結構 排序 堆排序
附加空間 乙個儲存最大記錄的空間 是否是穩定的排序方法 不穩定 include stdio.h define maxsize 10 typedef int keytype typedef struct recordtype typedef struct table void swap table t...
資料結構 排序 堆排序
堆排序是選擇排序中的一種,選擇排序的思想是在未排序的數列中選擇乙個最大或者最小的資料加入已排序序列,大根堆這個結構的根節點就是最大值,因此會大大方便選擇。在完全二叉樹中,根 左,右 手動建堆 第一步 順序建立一棵樹 第二步 檢查非葉子結點是否滿足 根 左,右,不滿足就將當前節點與最大的乙個孩子互換 ...
資料結構排序 堆排序
堆排序就是利用了最大堆 或最小堆 堆頂記錄的關鍵字最大 或最小 這一特徵,使得在當前無序區中選取最大 或最小 關鍵字變得簡單。以最大堆為例,它的基本思想就是 先將初始檔案r 1.n 建成乙個最大堆,此堆為初始的無序區 再將關鍵字最大的記錄r 1 即堆頂 和無序區的最後乙個記錄r n 交換,由此得到新...