快速排序原理:
1.取一个数,然后按这个数为依据,将所有数据分成2块。左边都比这个数小,右边都比这个数大。
2.再取左边的一个数(比如第一个,或者中间个,或者最后个),再将左边的数据分成2部分。左边都比这个数小,右边都比这个数大。
3.递归。
时间复制度。nlogn
public class QuickSort {
public static void sort(Comparable[] data,int low,int high) {// 枢纽元,一般以第一个元素为基准进行划分
int i = low;
int j = high;
if (low < high) {
// 从数组两端交替地向中间扫描
Comparable pivotKey = data[low];
// 进行扫描的指针i,j;i从左边开始,j从右边开始
while (i < j) {
while (i < j && data[j].compareTo(pivotKey) > 0) {
j--;
}// end while
if (i < j) {
// 比枢纽元素小的移动到左边
data[i] = data[j];
i++;
}// end if
while (i < j && data[i].compareTo(pivotKey) < 0) {
i++;
}// end while
if (i < j) {
// 比枢纽元素大的移动到右边
data[j] = data[i];
j--;
}// end if
}// end while
// 枢纽元素移动到正确位置
data[i] = pivotKey;
// 前半个子表递归排序
sort(data,low,i - 1);
// 后半个子表递归排序
sort(data,i + 1,high);
}// end if
}// end sort
public static void main(String[] args) {
// 在JDK1.5版本以上,基本数据类型可以自动装箱
// int,double等基本类型的包装类已实现了Comparable接口
Comparable[] c = { 4,9,23,1,45,27,5,2 };
sort(c,0,c.length - 1);
for (Comparable data : c) {
System.out.println(data);
}
}
}