標籤:int 沒有 -o 結構 OLE 紅/黑樹狀結構 break 尋找 atom
二叉樹:
1、每個結點不能多於兩個子樹;
2、一顆平衡二叉樹的深度要比及結點個數N小得多。
二叉尋找樹:
1、結點x的所有左子樹的值小於x,所有右子樹的值大於x;
AVL樹:
1、一種帶有平衡條件的二叉尋找樹;
2、每個結點的左子樹和右子樹深度最多差1。
紅/黑樹狀結構:
1、樹的顏色只能為紅色或黑色的一種平衡二叉樹;
2、樹的根結點和葉子結點必須為黑色;
3、紅色結點的子結點必須為黑色,且必存在;
4、任一結點到其每個葉子結點黑色的結點樹相同;
5、從根到葉子的最長的可能路徑不多於最短的可能路徑的兩倍長
紅/黑樹狀結構與平衡二叉樹:
紅/黑樹狀結構放棄了追求完全平衡,追求大致平衡,在與平衡二叉樹的時間複雜度相差不大的情況下,保證每次插入最多隻需要三次旋轉就能達到平衡,實現起來也更為簡單。
平衡二叉樹又被稱為AVL樹
紅/黑樹狀結構有更好的效率,更高的統計效能
雞尾酒排序:
<wiz_code_mirror>
private static void sort(int[] arrys) {
int tmp = 0;
for (int i = 0; i < arrys.length/2; i++) {
boolean isSorted = true;
for (int j = i; j < arrys.length-i-1; j++) {
if(arrys[j]>arrys[j+1]){
tmp = arrys[j];
arrys[j] = arrys[j+1];
arrys[j+1] = tmp;
isSorted = false;
}
}
if(isSorted){
break;
}
isSorted = true;
for (int j = arrys.length-i-1; j > i; j--) {
if(arrys[j]<arrys[j-1]){
tmp = arrys[j];
arrys[j] = arrys[j-1];
arrys[j-1] = tmp;
isSorted = false;
}
}
if(isSorted){
break;
}
}
}
快速排序: <wiz_code_mirror>
private static void sort(int[] arrys,int low, int high) {
int start = low;
int end = high;
int key = arrys[start];
while(end>start){
while(end>start&&arrys[end] >= key)//如果沒有比關索引值小的,比較下一個,直到有比關索引值小的交換位置,然後又從前往後比較
end--;
if(key >= arrys[end]){
int tmp = arrys[end];
arrys[end] = arrys[start];
arrys[start] = tmp;
}
while(end>start&&key >= arrys[start])
start++;
if(arrys[start] >= key){
int tmp = arrys[end];
arrys[end] = arrys[start];
arrys[start] = tmp;
}
//此時第一次迴圈比較結束,關索引值的位置已經確定了。左邊的值都比關索引值小,右邊的值都比關索引值大,但是兩邊的順序還有可能是不一樣的,進行下面的遞迴調用
}
if(start > low){
sort(arrys, low, start-1);//左邊序列。第一個索引位置到關索引值索引-1
}
if(high>end){
sort(arrys, end+1, high);//右邊序列。從關索引值索引+1到最後一個
}
}
Java常用資料結構和演算法