1. 程式人生 > >Algs4-2.1.17動畫-插入排序

Algs4-2.1.17動畫-插入排序

sso new raw for 排列 oid als out 位置

2.1.17動畫。修改插入排序和選擇排序的代碼,使之將數組內容繪制成正文中所示的棒狀圖。在每一輪排序後重繪圖片來產生動畫效果,並以一張“有序”的圖片作為結束,即所有圓棒均已按照高度有序排列。提示:使用類似於正文中的用例來隨機生成Double值,在排序代碼的適當位置調用show()方法,並在show()方法中清理畫布並繪制棒狀圖。

public class Insertion
{
public static void sort(Comparable[] a)
{
int N=a.length;
for (int i=0;i<N;i++)
{
for(int j=i;j>0 && less(a[j],a[j-1]);j--)
exch(a,j,j-1);
showAnimation(a);
}
}

private static boolean less(Comparable v,Comparable w)
{ return v.compareTo(w)<0;}

private static void exch(Comparable[] a,int i,int j)
{
Comparable t=a[i];
a[i]=a[j];
a[j]=t;
}

private static void show(Comparable[] a)
{
for (int i=0;i<a.length;i++)
StdOut.print(a[i]+" ");
StdOut.println();
}

private static void showAnimation(Comparable[] a)
{
StdDraw.setXscale(0.0,a.length);
StdDraw.setYscale(0.0,a.length);
StdDraw.setPenRadius(0.005);
StdDraw.pause(100);
StdDraw.clear(StdDraw.GRAY);
StdDraw.setPenColor(StdDraw.BLACK);
for(int i=0;i<a.length;i++)
{
StdDraw.line(i*1.0,0.0,i*1.0,(Double)a[i]*1.0);
}
}

public static boolean isSorted(Comparable[] a)
{
for (int i=0;i<a.length;i++)
if(less(a[i],a[i-1])) return false;
return true;
}

public static void main(String[] args)
{
int N=Integer.parseInt(args[0]);
Double[] a=new Double[N];
for(int i=0;i<N;i++)
a[i]=StdRandom.uniform(0.0,N*1.0);
//
StdDraw.pause(5000);
sort(a);
}
}

Algs4-2.1.17動畫-插入排序