快速排序简介
通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列
源代码
public class QuickSort {
public static void sort(int[] data){
int start=0,end=data.length-1;
quickSort(data,start,end);
}
private static void quickSort(int[] data,int start,int end){
if(start >= end){
return;
}
int pivot = data[start];
int low=start,high=end;
while( low < high ){
// 从右边开始比较,比pivot大的数位置不变
while( low < high && data[high] >= pivot) {
high -= 1;
}
data[low] = data[high];
//从左边开始比较,比pivot小的数位置不变
while( low < high && data[low] <= pivot) {
low += 1;
}
data[high]=data[low];
}
data[low] = pivot;
System.out.println("low:"+low+","+Arrays.toString(data));
quickSort(data,start,low-1);
quickSort(data,low+1,end);
}
public static void main(String[] args) {
int[] data = {9,1,5,3,7,4,2};
System.out.println("before:"+Arrays.toString(data));
sort(data);
System.out.println("after:"+Arrays.toString(data));
}
}
执行结果
before:[9, 1, 5, 3, 7, 4, 2]
low:6,[2, 1, 5, 3, 7, 4, 9]
low:1,[1, 2, 5, 3, 7, 4, 9]
low:4,[1, 2, 4, 3, 5, 7, 9]
low:3,[1, 2, 3, 4, 5, 7, 9]
after:[1, 2, 3, 4, 5, 7, 9]
分析
快速排序不是一种稳定的排序算法