算法(第4版) 2.1.18 可视轨迹(插入排序)

修改2.1.17给出的解答,为插入排序生产正文中类似的可视轨迹。

import edu.princeton.cs.algs4.StdDraw;

public class Insertion {

	public static void sort(Comparable[] a) {
		int N=a.length;
		for(int i=1;i0&&less(a[j],a[j-1]);j--) {
				exch(a,j-1,j);
            min=j;		//获取受变动元素的下限	
			}	
			
			draw(a, i, min);//i绘出红色,i到min绘出黑色,其余绘灰色
			//延迟
			try   
			{   
			Thread.currentThread();
			Thread.sleep(200); 
			}   
			catch(Exception e){}  
			//清除画板
			clear();
		}
		draw(a,N,N);
	}
/**
 * 
 * @param a 排序数组 
 * @param ie 要插入的元素,以红色表示
 * @param min 参与比较的元素的最小值,以黑色表示
 */
	public static void draw(Comparable[] a,int e,int min) {
		int N=a.length;
		for(int i=0;imin)||i==e){               //黑色
				StdDraw.setPenColor(StdDraw.BLACK);
	        	StdDraw.filledRectangle(x, y, rw, rh);		
			}else {                                     //灰色
				StdDraw.setPenColor(StdDraw.GRAY);
	        	StdDraw.filledRectangle(x, y, rw, rh);
			}       	
        }
	}
	
		
	public static void clear() {
		StdDraw.clear();
	}
	
	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

运行结果:

算法(第4版) 2.1.18 可视轨迹(插入排序)_第1张图片

结束后全部显示灰色

算法(第4版) 2.1.18 可视轨迹(插入排序)_第2张图片

你可能感兴趣的:(算法,算法)