最大堆建堆過程的優化及第二種堆排序 Java版

2021-08-17 04:13:34 字數 1129 閱讀 9156

*最大堆建堆過程的優化

*與上條部落格區別在於建構函式,heapify過程,具體來說:

public

class maxheap

count=n;

// i=count/2,data陣列中第乙個不是葉子的節點

//葉子節點看成滿足堆

//根節點從1開始

//此時構造方法已經實現了乙個堆,不需要shiftup,但是不能插入

for(int i=count/2;i>=1;i--)

}//*****************************************

//判斷堆是否為空

boolean isempty()

//輸出堆中元素個數

int size()

public

intgetcapacity()

//從堆中取出元素,優先佇列思想

public

intextractmax()

private

void

shiftdown(int i)

}private

void

swap(int i, int j)

}public

void

print(int data,int count)

}

*第二種堆排序

*時間複雜度和空間複雜度均為o(n)

*第一種是將n個元素逐個插入到乙個空堆中,所以為o(nlogn)

*優化方式只利用shiftdown,為o(n)

public

class heapsort1

}public

static

void

main(string args) ;

int n=arr.length;

heapsort1 sort2=new heapsort1();

sort2.heapsort2(arr, n);

for(int i=0;iout.print(arr[i]+" ");

}}

堆排序中建堆過程的時間複雜度O n 的證明

下面是建立大根堆的 template void createbigrootheap type array,int len array k temp 現在對建立堆時所使用的時間複雜度為o n 進行證明 令堆所對應的完全二叉樹的高度為h,節點的個數為n,現假定完全二叉樹為滿二叉樹 即n 2 h 1,如下...

最大堆的實現及堆排序

b站浙大資料結構課程 堆的原理與實現 堆排序演算法說明 最大堆,每個節點都比其左右子節點大。且是完全二叉樹。從根節點到任意節點路徑上結點序列的有序性。堆排序演算法說明 將待排序序列構建成乙個堆 h 0 n 1 根據 公升序降序需求 選擇大頂堆或小頂堆 把堆首 最大值 和堆尾互換 把堆的尺寸縮小 1,...

java實現最大索引堆 最大堆的優化版

最大索引堆是為了防止swap 交換大型資料帶來的低效率,所以只交換索引。所以成員變數上比最大堆多了乙個儲存索引的陣列indexs,為了更方便快捷找到某個索引在indexs中的位置,因此又新增了乙個儲存索引位置的陣列reverse,reverse i 的值表示索引i在indexs j i中的位置j 即...