1、快速排序理念
找基准线,基准线将数组分为两部分,左边小于基准线的值,右边大于基准线的值,递归排序。
2、java代码
/**
* 快速排序
* @param list
* @param left
* @param right
*/
public static void quickSort(int[] list,int left,int right){
if(left < right){
// 1、找基准线
int point = partition(list,left,right);
// 2、递归排序左字数组
quickSort(list,left,point-1);
// 3、递归排序右字数组
quickSort(list,point+1,right);
}
}
/**
* 找基准线
* 逻辑:1、初始化基准线=list[left],2、基准线的左边值<基准线,3、基准线的右边值>基准线,4、不满足2、3条件则交换值,5、返回基准线
* @param list
* @param left
* @param right
* @return
*/
public static int partition(int[] list,int left,int right){
int first = list[left];
while (left < right){
while (left < right && first <= list[right]){
right--;
}
swap(list,left,right);
while (left < right && first >= list[left]){
left++;
}
swap(list,left,right);
}
return left;
}
/**
* 数组交换函数
* @param list
* @param left
* @param right
*/
public static void swap(int[] list,int left,int right){
int temp = list[left];
list[left] = list[right];
list[right] = temp;
}