public class heap
/*** 插入操作的
*/public void insert(int value)
count++;
a[count] = value;
// 插入後,從節點開始從下往上開始堆化,插入 自下往上堆化
int i = count;
while (i / 2 > 0 && a[i] > a[i / 2])
}public int removemax()
// 最大值位於棧頂
int max = a[1];
// 然後繼續堆化,自上向下堆化,最後乙個元素和頂部元素交換後開始堆化
a[1] = a[count];
count--;
heapify(a, 1, count);
return max;
}/**
* 從 i開始到n,進行堆化
* @param a
* @param i
* @param n
*/public void heapify(int a, int i, int n)
if (i * 2 + 1 <= n && a[i * 2 + 1] > a[i])
if (maxpos == i) }}
}
堆的實現
2.堆排序
public class heaputils
if (i * 2 + 1 <= n && a[i * 2 + 1] > a[i])
if (maxpos == i) }}
/*** 自底部開始向下堆化
* @param a
* @param n
*/public static void buildheap(int a, int n)
}public static void sort(int a, int n)
printdata(a);
}/**
*輸出資料
* @param a
*/private static void printdata(int a)
log.d("zpb","**********=");
}}
資料結構 堆及堆的應用
堆是一種特殊的樹形結構,堆的把每乙個節點都有乙個值,我們通常所說的堆這種資料結構,指的就是二叉堆。其實它可以被看做乙個完全二叉樹。它的每個節點的子樹又可以被看做是堆。堆可以分為最大堆和最小堆 最大堆 每個父節點都大於孩子節點 最小堆 每個父節點都小於孩子節點 a 我們在定義堆的資料成員的時候,利用s...
資料結構 堆及堆的應用
1.堆 把一組資料按照完全二叉樹的順序儲存模式儲存在乙個二維陣列中,若ai 若ai ai 1 ai ai 2,則稱為大堆 i 0,1,2.n 在堆中,若設父親節點為parent,則它的左孩子為2 parent 1,右孩子為2 parent 2 void makeheap datatype a,siz...
資料結構綜合應用 堆
動態維護中位數問題,可以用堆,樹狀陣列,線段樹等資料結構解決 堆,可以用來進行插入,查詢最值,刪除最值等操作 對頂堆 一大根堆和一小根堆,大根堆維護最小值,小根堆維護最大值。洛谷1168 題意 每輸入奇數個數字,實時輸出中位數 解題思路 定義乙個對頂堆,輸入第乙個數字,並作為中位數輸出,每輸入乙個數...