乙個最大堆
package com.example.demo.algorithm;
/** * @author aloli
* @date 2020/9/10 13:35
* 乙個最大堆
*/public
class
maxheap
public
maxheap
(int size)
if(size>maxsize)
this
.size =0;
this
.elementdata =
newint
[size+1]
;this
.elementdata[0]
= defaultdata;
}public
maxheap
(int
arr)
}/**
* 將資料放在最後,同時調整堆
* @param data
*/public
void
put(
int data)
this
.elementdata[
++size]
= data;
revisionbottomtotop
(size);}
/** * 彈出根結點,將最後乙個元素作為根結點,同時調整堆
* @return
*/public
intpop()
int ret = elementdata[1]
; elementdata[1]
= elementdata[size--];
revisiontoptobottom
(elementdata[1]
);return ret;
}public
boolean
isempty()
/** *從最後乙個結點調整堆
* @param currentindex
*/private
void
revisionbottomtotop
(int currentindex)
}/**
* 從根結點調整堆
*/private
void
revisiontoptobottom
(int currentdata)
if(currentdata >= elementdata[child]
)else
} elementdata[parent]
= currentdata;
}private
void
swap
(int var1,
int var2)
}
演算法學習 5
快速排序也是一種採用分治策略的演算法,它與歸併排序不同的是,它是原址排序,不需要額外的空間。如果把要排序的陣列簡單從任何位置切成兩個子陣列,對子陣列排序後,又因為是原址排序,排序後的兩個子陣列分別都是有序的,但是作為乙個整體很顯然未必就是是有序的呢 所以分解肯定就不能是簡單的把陣列切斷成兩個子陣列。...
排序演算法學習(5)
1.將2個各有n個元素的有序表歸併成乙個有序表,其最少的比較次數是 n 分析 歸併排序最少比較n,最多比較2n 1.當第乙個有序表中所有的元素都小於 或大於 第二個表中的元素,只需要用第二個表中的第乙個元素依次與第乙個表的元素比較,總計比較n次。分析二 a a0,a1,an b b0,b1,bn 為...
演算法學習Task5
k means演算法 聚類與分類的區別,分類的目標事先已知,而聚類是一種無監督學習,目標未知 具體方法有距離 密度 層次 網格 圖論 k means演算法基於距離 1 確定簇的個數k,可以通過經驗以及交叉檢驗可以 2 初始選取k個中心點,採用k means 加速收斂,即選擇樣本點中任意乙個作為第乙個...