快速排序是一种最简单的排序算法,原理:首先找到素组中最小的那个元素,其次将它和数组的第一个元素交换位置(如果第一个元素就是最小元素那么它就和自己交换)。再次,在剩下的元素中找到最小的元素,将它和数组的第二个元素交换位置。如此往复,知道将整个数组 排序
代码如下:
Template类
ublic class Template {
//排序算法
@SuppressWarnings("all")
public static void sort(Comparable[] a)
{}
//比较方法
@SuppressWarnings("all")
public static boolean less(Comparable v, Comparable w)
{
return v.compareTo(w) < 0;
}
//交换
@SuppressWarnings("all")
public static void exch(Comparable[] a, int i, int j)
{
Comparable t = a[i]; a[i] = a[j]; a[j] = t;
}
//打印
@SuppressWarnings("all")
public static void show(Comparable[] a)
{
for(int i=0; i < a.length; i++)
StdOut.print(a[i] + " ");
StdOut.println();
}
//判断数组是否有序
@SuppressWarnings("all")
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;
}
}
测试类:
ublic class SelectionSort extends Template{
public static void main(String[] args) {
String[] a = {"S","O","R","T","E","X","A","M","P","L","E"};
sort(a);
assert isSorted(a);
show(a);
}
//排序算法
@SuppressWarnings("all")
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]) && i!=j)
exch(a, min, j);
}
}
}
每次排序后的结果
S O R T E X A M P L E
A S R T O X E M P L E
A E S T R X O M P L E
A E E T S X R O P M L
A E E L T X S R P O M
A E E L M X T S R P O
A E E L M O X T S R P
A E E L M O P X T S R
A E E L M O P R X T S
A E E L M O P R S X T
A E E L M O P R S T X
A E E L M O P R S T X
1.由此可见,对于长度为N的数组。此算法的需要交换的次数是N次,所以算法的时间效率取决于比较的次数,大约需要N2(平方)/2次比较。因为每次循环的次数分别是:(N-1),(N-2)…… 1。