Author: 周留名
基本思想:
通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
java代码实现
import java.util.Arrays;
public class TestFive{
/**
* 交换数值
*/
public static void swap(int[] arr,int a,int b){
int temp = arr[a];
arr[a] = arr[b];
arr[b] = temp;
}
/**
* 划分数组
*/
public static int divide(int[] arr,int left,int right){
//最左侧为基数
int temp = arr[left];
while(right>left){
//右侧大于等于基数的不交换
while (temp<=arr[right]&& left < right) {
right--;
}
//右侧小于基数的交换
if(right>left){
swap(arr,left,right);
left++;
}
//左侧小于等于基数的不交换
while (temp>=arr[left]&& left < right) {
left++;
}
//左侧大于基数的交换
if(right>left){
swap(arr,left,right);
right--;
}
}
//当right<=left时结束本次分组
return right;
}
/**
* 快速排序
*/
public static void quickSort(int[] arr,int left,int right){
if(arr==null||left>=right||arr.length<=1){
return ;
}
int mid = divide(arr,left,right);
quickSort(arr,left,mid-1);
quickSort(arr,mid+1,right);
}
/**
* main函数
*/
public static void main(String[] args) {
int[] arr = new int[]{4,3,2,5,3,2,1,6,7,7,12,9};
System.out.println("排序前:");
System.out.println(Arrays.toString(arr));
quickSort(arr,0,arr.length-1);
System.out.println("排序后:");
System.out.println(Arrays.toString(arr));
}
}