一、选择排序:
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);
}
}
public static boolean less(Comparable v, Comparable w)
{
return v.compareTo(w) < 0;
}
public 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();
}
public 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)
{
// TODO Auto-generated method stub
String[] a = {"abc", "bbb", "ad", "fa", "ccc"};
sort(a);
assert isSorted(a);
show(a);
}
}
二、插入排序:
public class Insertion
{
public static void sort(Comparable[] a)
{
int N = a.length;
for (int i = 1; i < N; i++)
for (int j = i; j > 0 && less(a[j], a[j-1]); j--)
exch(a, j, j-1);
}
public static boolean less(Comparable v, Comparable w)
{
return v.compareTo(w) < 0;
}
public 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();
}
public 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)
{
// TODO Auto-generated method stub
String[] a = {"abc", "bbb", "ad", "fa", "ccc"};
sort(a);
assert isSorted(a);
show(a);
}
}
三、希尔排序:
public class Shell
{
public static void sort(Comparable[] a)
{
int N = a.length;
int h = 1;
while (h < N/3) h = h * 3 + 1;
while (h >= 1)
{
for (int i = h; i < N; i++)
for (int j = i; j >= h && less(a[j], a[j-h]); j -= h)
exch(a, j, j-h);
h = h/3;
}
}
public static boolean less(Comparable v, Comparable w)
{
return v.compareTo(w) < 0;
}
public 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();
}
public 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)
{
// TODO Auto-generated method stub
String[] a = {"abc", "bbb", "ad", "fa", "ccc"};
sort(a);
assert isSorted(a);
show(a);
}
}