夯實基礎 堆排序

2021-06-23 08:06:19 字數 935 閱讀 7290

堆結構:任意的乙個父節點大於其子節點。

邏輯結構:二叉樹

物理結構:陣列

如果從角標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...