堆是一種特殊的樹,他滿足一下兩點要求
最大堆和最小堆是二查堆的兩種形式,最大堆和最小堆很相似,所以本文只實現最大堆以及堆排序
在最大堆中,設根節點索引從1開始,當父節點索引為i時,左子節點為2i,右子節點為2i+1
堆的資料儲存可以直接用陣列存
private int data;
private int size;//當前堆的大小
private int capacity;//容量
public maxheap(int maxsize)
可以先將要插入的元素放在最後乙個位置,然後與父元素比較、不斷上移,直到該元素處於正確的位置
//堆插入元素時上移
private void shiftup(int i)
}//插入操作
public void insert(int d)
data[++size] = d;
shiftup(size);
}
最大堆刪除操作只能刪除最大元素,具體做法是將最後乙個元素放到第乙個位置,然後不斷將其下移到適當位置
//堆刪除元素時下移
private void shiftdown(int i)
if (data[i] > data[j])
break;
//交換、下移
int t = data[i];
data[i] = data[j];
data[j] = t;
i = j;}}
//刪除堆頂,將最後乙個移到堆頂,然後不斷下移即可
public int deletemax()
int t = data[1];//記錄刪除的值
data[1] = data[size--];
shiftdown(1);
return t;
}
不斷刪除最大元素即可與實現堆排序
//堆排序,可以先將陣列建成堆,然後依次刪除最大元素
public void heapsort(int arr, maxheap heap)
//從小到大排序
for (int i = arr.length - 1; i >= 0; i--)
}
今天我們來談談jquery,
恢復內容開始 首先從jquery的兩種寫法開始 1.document ready function 首先我們的jquery是用來操作dom節點的,所以必須等到文件載入完畢才能對其進行操作 以下兩種操作可能導致錯誤 2.簡潔寫法,function 所以要等到文件就緒才執行jquery 說說事件 一.k...
才不只是塑料小人 今天,我們來談談手辦
alter黒咲 芽亜 或許你經常看到這樣一群人,他們的桌面上或展櫃裡擺滿了精緻而漂亮的塑料模型,並對其懷抱著巨大的熱愛。這些被稱為手辦的物品為什麼會有那麼大的魔力?今天,我們就來談談手辦。手辦原指來自日本的garage kits gk 是套裝模件 model kits 的意思,是日系動漫周邊的一類。...
今天我們來玩遊戲(博弈)
鳴謝xym學長 其實前面的都是廢話 精髓都在最後的sg定理中了 很難理解?那好,我們舉個栗子 nim遊戲 其實學長的課件上有寫解法,但是我覺得寫得太爛 還是自己說比較清楚 複雜的情況我們考慮不過來,那就從簡單的開始 如果只有一堆,先手必勝 都拿走就好了 兩堆 如果有兩堆中的石子數目相同,那麼先手從任...