插入排序
import edu.princeton.cs.algs4.StdDraw;
public class Insertion {
//排序
public static void sort(Comparable[] a) {
int N=a.length;
for(int i=1;i<N;i++) {
int min=i;
for(int j=i;j>0&&less(a[j],a[j-1]);j--) {
exch(a,j-1,j);
draw(a);
clear();
}
}
draw(a);
}
//绘图
public static void draw(Comparable[] a) {
int N=a.length;
for(int i=0;i<N;i++) {
double x=1.0*i/N;
double y=(double)a[i]/2.0;
double rw=0.5/N;
double rh=(double)a[i]/2.0;
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<a.length;i++)
System.out.print(a[i]+" ");
System.out.println();
}
//判断是否排序
private 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=50;
Comparable[] a=new Comparable[N];
for(int i=0;i<N;i++)
a[i]=Math.random();
sort(a);
}
}
选择排序
import edu.princeton.cs.algs4.StdDraw;
public class Selection {
//排序
public static void sort(Comparable[] a) {
int N = a.length;
for (int i = 0; i < N; i++) {
int min = i;
for (int j = i + 1; j < N; j++) {
if (less(a[j], a[min])) {
min = j;
}
}
exch(a, i, min);
draw(a);
clear();
}
draw(a);
}
//绘图
public static void draw(Comparable[] a) {
int N=a.length;
for(int i=0;i<N;i++) {
double x=1.0*i/N;
double y=(double)a[i]/2.0;
double rw=0.5/N;
double rh=(double)a[i]/2.0;
StdDraw.filledRectangle(x, y, rw, rh);
}
}
//清除
public static void clear() {
StdDraw.clear();
}
//交互两个元素
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++)
System.out.print(a[i] + " ");
System.out.println();
}
//比较两个元素的大小
private static boolean less(Comparable v, Comparable w) {
return v.compareTo(w) < 0;
}
//判断是否排序
private static boolean isSorted(Comparable[] a) {
for (int i = 1; i < a.length; i++)
if (less(a[i], a[i-1]))
return false;
return true;
}
public static void main(String[] args) {
int N=50;
Comparable[] a=new Comparable[N];
for(int i=0;i<N;i++)
a[i]=Math.random();
sort(a);
}
}