-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMinPQ.java
More file actions
61 lines (58 loc) · 1.45 KB
/
MinPQ.java
File metadata and controls
61 lines (58 loc) · 1.45 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
import java.util.Random;
public class MinPQ<Key extends Comparable<Key>>{
private Key[] pq;
private int N=0;
public MinPQ(int max){
pq=(Key[]) new Comparable[max+1];
}
public boolean isEmpty(){return N==0;}
public int size(){return N;}
public void insert(Key v){
N++;
pq[N]=v;
swim(N);
}
public Key delMin(){
Key Min=pq[1];
exch(1,N);N--;
pq[N+1]=null;
sink(1);
return Min;
}
private boolean less(int i,int j){
return pq[i].compareTo(pq[j])<0;
}
private void exch(int i,int j){
Key t=pq[i];pq[i]=pq[j];pq[j]=t;
}
public void swim(int i){
while (i>1){
if (less(i,i/2)){exch(i/2,i);}
i=i/2;
}
}
public void sink(int j){
while (j*2<=N){
int k=2*j;
if (k<N && less(k+1,k)){k++;}
if (less(j,k)){break;}
exch(k,j);
j=k;
}
}
public void show(){
for (int i=1;i<=N;i++){System.out.println(pq[i]+"");}
}
public static void main(String[] args){
int N=10;
Random r = new Random();
MinPQ a=new MinPQ<>(N);
for(int i=0 ; i<N ; i++){
int ran1 = r.nextInt(100);
a.insert(ran1);
}
a.show();
System.out.println("Min:"+a.delMin());
a.show();
}
}