堆排序思想:(以大頂堆為例)
1、先建初始堆,從第乙個非葉子節點開始調整堆為乙個大頂堆,直到整個待排序列成為乙個大頂堆;
2、將堆頂元素與堆中的最後乙個元素交換
3、將堆中的最後乙個元素移除堆
4、再次調整待排序列為乙個大頂堆,從堆中的根節點開始比較,比較該節點的左右子節點,將較大的節點值與根節點的值比較,若根節點的值小於較大子節點,則交換;
5、轉到步驟2,直到堆中所有的元素被移除。
堆排序的時間複雜度是:在最壞的情況下仍然是o(nlogn),空間複雜度是o(1),是不穩定的排序;不適合小資料量的排序。
大根堆排序得到的是乙個公升序排列
小根堆排序得到的是乙個降序排列
public static void adjustheap(int data,int s,int m)
data[s]=rc; //將堆頂元素放入合適的位置
}public static void heapsort(int data,int n)
for(int i=n-1;i>0;i--)
}private static void swap(int data,int first,int last)
public static void main(string args);
heapsort(data,data.length);
for(int i =0;isystem.out.println("data["+i+"]"+data[i]);}}
資料結構 排序(堆排序)
最小堆的特性說明 即任何一非葉節點的值不大於其左右孩子節點的值。堆排序最適合取topn的資料 include myheap.h int myswap int src,int desc 調整樹 arr 需要排序的陣列 root 根節點 size 樹的大小 int changetree int arr,...
資料結構 排序 堆排序
附加空間 乙個儲存最大記錄的空間 是否是穩定的排序方法 不穩定 include stdio.h define maxsize 10 typedef int keytype typedef struct recordtype typedef struct table void swap table t...
資料結構 排序 堆排序
堆排序是選擇排序中的一種,選擇排序的思想是在未排序的數列中選擇乙個最大或者最小的資料加入已排序序列,大根堆這個結構的根節點就是最大值,因此會大大方便選擇。在完全二叉樹中,根 左,右 手動建堆 第一步 順序建立一棵樹 第二步 檢查非葉子結點是否滿足 根 左,右,不滿足就將當前節點與最大的乙個孩子互換 ...