引言
昨天晚上没写,所以今天早上一大早就来不上我昨天学习算法的笔记,好记性不如烂笔头,尤其是算法,掌握得不是很熟练的。
第一次实现堆,还是很奇妙的感觉。我要让他变成熟悉的感觉
算法笔记
堆排序
首先堆是一种重要的数据结构,可以实现“动态”的优先队列,优先队列,是一种根据优先级决定出队的顺序,优先队列在很多情况都有使用,常见的有CPU的资源管理,虽然可以说现将优先级排好序,然后第一个出队,但是在CPU的资源管理中,不断会有新的任务到来,而且原有任务的优先级也会发生改变,所以如果使用排序就不太好。堆的出队和入队都是logn的时间复杂度。
实现优先队列的方法有三个
- 排好序的数组,插入时找到正确的位置,输出时直接输出第一个元素
- 未排好序的数组,直接插入到末尾,输出时寻找最大值
- 堆,插入和取出最大值都是logn的级别
堆的实现
难点:shiftUp函数,shiftDown函数
class Heap<Item>{
int count;
int capicitiy;
Item[] data;//从1开始计数
public Heap(int capicity){
this.capicity = capicity;
count = 0;
data = new Item[capicity+1];//
}
public Heap(item[] arr, int n){