*最大堆建堆過程的優化
*與上條部落格區別在於建構函式,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 即...