快速排序就是通过一次排序,将数据集合分成独立的两部分,使得一部分的记录小于另一部分的记录
1.具体实现和测试
public class QuickSort {
public static void main(String[] args){
int[] a = {3,4,6,1,2,9,8,0,5,7};
quickSort(a, 0, a.length-1);
System.out.println(Arrays.toString(a));
}
/**
* 快速排序:取第一个元素进行比较 使得这个元素的左边都小于它,这个元素的右边都大于它
* @param arr
* @param low
* @param high
*/
private static void quickSort(int[] arr, int low, int high){
int pivot;
if(low < high){
pivot = partion(arr, low, high); //比较调整
quickSort(arr, low, pivot-1);
quickSort(arr, pivot+1, high);
}
}
private static int partion(int[] arr, int low, int high){
int temp = arr[low]; //去第一个元素作为配匹配元素
while(low < high){
while(low < high && arr[high] >= temp){ //必须加上等号,否则首尾两个数相同时陷入死循环
high--;
}
swap(arr, low, high);
while(low < high && arr[low] <= temp){ //必须加上等号,否则首尾两个数相同时陷入死循环
low++;
}
swap(arr, low, high);
}
return low;
}
private static void swap(int[] arr, int low, int high){
int temp = arr[low];
arr[low] = arr[high];
arr[high] = temp;
}
}
2.测试结果
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
因为匹配元素可能本身就是数据集合中最小或最大的。所以对匹配元素,可以进行优化,比如去左端,右端和中间三个数排序,然后取中间的那个与第一个元素进行替换,作为匹配元素