import java.awt.Font;
import java.util.Arrays;
import edu.princeton.cs.algs4.In;
import edu.princeton.cs.algs4.StdIn;
import edu.princeton.cs.algs4.StdOut;
import edu.princeton.cs.algs4.StdDraw;
import edu.princeton.cs.algs4.StdRandom;
import java.util.Iterator;
public class MaxPQ
{// 优先队列中的初级实现
private int[] a;
private int N;
public MaxPQ()
{// 创建一个优先队列
a = new int[100];
}
public MaxPQ(int max)
{// 创建一个最大容量为max的优先队列
a = new int[max];
}
public MaxPQ(int[] b)
{// 用a[]中的元素创建一个优先队列
int len = b.length;
a = new int[len];
for(int i=0; i<len; i++)
{
a[i] = b[i];
}
}
public void insert(int v)
{// 向优先队列中插入一个元素
a[N++] = v;
}
public int max()
{// 返回最大元素
int max = a[0];
for(int i=1; i<N; i++)
{
if(less(max, a[i]))
max = a[i];
}
return max;
}
public boolean less(int v, int w)
{
return v < w;
}
public int delMax()
{// 删除并返回最大元素
int max = 0;
for(int i=1; i<N; i++)
{
if(less(a[max], a[i]))
max = i;
}
exch(a, max, N-1);
int item = a[--N];
return item;
}
public void exch(int[] a, int i, int j)
{// 对换元素
int tmp = a[i];
a[i] = a[j];
a[j] = tmp;
}
public boolean isEmpty()
{// 返回队列是否为空
return N == 0;
}
public int size()
{// 返回队列中元素的个数
return N;
}
public void resize(int max)
{// 调整数组大小
int[] b = new int[max];
for(int i=0; i<N; i++)
{
b[i] = a[i];
}
a = b;
}
public void show()
{// 显示数组的内容
for(int i=0; i<N; i++)
{
StdOut.printf(a[i] + " ");
}
StdOut.println();
}
public static void main(String[] args)
{
int len = StdIn.readInt();
MaxPQ maxPq = new MaxPQ(len);
for(int i=0; i<len; i++)
{
maxPq.insert(StdIn.readInt());
}
maxPq.show();
for(int i=0; i<len; i++)
{
StdOut.printf(maxPq.delMax() + " ");
}
}
import java.util.Arrays;
import edu.princeton.cs.algs4.In;
import edu.princeton.cs.algs4.StdIn;
import edu.princeton.cs.algs4.StdOut;
import edu.princeton.cs.algs4.StdDraw;
import edu.princeton.cs.algs4.StdRandom;
import java.util.Iterator;
public class MaxPQ
{// 优先队列中的初级实现
private int[] a;
private int N;
public MaxPQ()
{// 创建一个优先队列
a = new int[100];
}
public MaxPQ(int max)
{// 创建一个最大容量为max的优先队列
a = new int[max];
}
public MaxPQ(int[] b)
{// 用a[]中的元素创建一个优先队列
int len = b.length;
a = new int[len];
for(int i=0; i<len; i++)
{
a[i] = b[i];
}
}
public void insert(int v)
{// 向优先队列中插入一个元素
a[N++] = v;
}
public int max()
{// 返回最大元素
int max = a[0];
for(int i=1; i<N; i++)
{
if(less(max, a[i]))
max = a[i];
}
return max;
}
public boolean less(int v, int w)
{
return v < w;
}
public int delMax()
{// 删除并返回最大元素
int max = 0;
for(int i=1; i<N; i++)
{
if(less(a[max], a[i]))
max = i;
}
exch(a, max, N-1);
int item = a[--N];
return item;
}
public void exch(int[] a, int i, int j)
{// 对换元素
int tmp = a[i];
a[i] = a[j];
a[j] = tmp;
}
public boolean isEmpty()
{// 返回队列是否为空
return N == 0;
}
public int size()
{// 返回队列中元素的个数
return N;
}
public void resize(int max)
{// 调整数组大小
int[] b = new int[max];
for(int i=0; i<N; i++)
{
b[i] = a[i];
}
a = b;
}
public void show()
{// 显示数组的内容
for(int i=0; i<N; i++)
{
StdOut.printf(a[i] + " ");
}
StdOut.println();
}
public static void main(String[] args)
{
int len = StdIn.readInt();
MaxPQ maxPq = new MaxPQ(len);
for(int i=0; i<len; i++)
{
maxPq.insert(StdIn.readInt());
}
maxPq.show();
for(int i=0; i<len; i++)
{
StdOut.printf(maxPq.delMax() + " ");
}
}