堆結構:任意的乙個父節點大於其子節點。
邏輯結構:二叉樹
物理結構:陣列
如果從角標0開始
父節點左孩子節點:2*i+1
父節點右孩子節點:2*i+2
最後乙個非葉節點:(n-1)/2
如果從角標1開始
父節點左孩子節點:2*i
父節點右孩子節點:2*i+1
最後乙個非葉節點:n/2
堆排序分析:
最優時間複雜度:o(nlog2n)
最壞時間複雜度:o(nlog2n)
平均時間複雜度:o(nlog2n)
空間複雜度:o(1)
穩定性:不穩定
堆排序主要分三個函式:
1 調整成堆結構 void heapadjust(int *a,int i,int size);
2 構建堆 void buildheap(int *a,int size);
3 堆排序 void heapsort(int *a,int size);
當角標為0,堆排序**:
//調整堆
void heapadjust(int *a,int i,int size)
if(rchild<=size&&a[rchild]>a[max])
if(max!=i)
}}
//構建堆
void buildheap(int *a,int size)
}
//堆排序
void heapsort(int *a,int size)
}
//交換
void swap(int *a,int *b)
夯實基礎 排序演算法之桶排序
任務 使用桶排序將陣列從大到小排列。原始陣列 先迴圈陣列,取出陣列最大值17與最小值3,計算最大值與最小值的差值,以差值除以陣列長度,再加一得到桶的數量 17 3 10 1 2。迴圈陣列放到桶裡,結果 然後針對各個桶內資料進行排序。然後按順序取出各桶的結果。public static void bu...
堆排序基礎
首先,推薦大家去看下 演算法導論 那是演算法聖經,講得非常詳細,本文中的 大部分是將其中的偽 用c c 實現出來 雖然書上有堆排序 heapsort 的概念的詳細解釋,網路上介紹堆排序的講解也基本都有描述,我這還是將一些基本概念寫出來 堆 二叉 堆資料結構是一種陣列物件,可以被視為一棵完全二叉樹,樹...
演算法基礎 排序 堆排序
headsort2 是我自己想的,感覺這麼寫可以。驗證是ok的。區別等我問問。import com.alibaba.fastjson.json author wangtb date 2019 09 29 23 02 public class heapsort heapsort arr heapsor...