java快速排序
快速排序过程图解:https://www.seotest.cn/jishu/44475.html
java代码
package practice.sort;
/**
* 快速排序
*
* @author lbw
* @version 1.0
* @date 2020/11/3 10:48
*/
public class QuickSort {
public static void main(String[] args){
int [] array = {6,1,2,7,9,3,4,5,10,8};
//基数下标
int baseIndex = 0;
//右下标
int rightIndex = array.length - 1;
sort(array, baseIndex, rightIndex);
//打印
for(int number : array){
System.out.println(number);
}
}
/**
* 快速排序
* @param array 待排序的数组
* @param baseIndex 基数下标
* @param rightIndex 右下标
*/
private static void sort(int [] array, int baseIndex, int rightIndex){
//基数
int base = array[baseIndex];
//左下标
int leftIndex = baseIndex + 1;
if(leftIndex > rightIndex){
return;
}
//暂时记录右下标
int tempRightIndex = rightIndex;
//从右边寻找小于基数的数
for(; rightIndex > baseIndex; rightIndex --){
if(array[rightIndex] > base) continue;
//如果左右下标相遇,和基数交换位置
if(rightIndex <= leftIndex + 1){
swap(array, baseIndex, rightIndex);
break;
}
//从左边寻找大于基数的数
for(;leftIndex <= rightIndex; leftIndex ++){
//左右数交换位置
if(array[leftIndex] < base) continue;
//交换位置
swap(array, leftIndex, rightIndex);
break;
}
}
//继续排序基数左侧数组
sort(array, baseIndex, rightIndex -1);
//继续排序基数右侧数组
sort(array, rightIndex + 1, tempRightIndex);
}
/**
* 交换位置
* @param array 数组
* @param leftIndex 左下标
* @param rightIndex 右下标
*/
public static void swap(int [] array, int leftIndex, int rightIndex){
int temp = array[leftIndex];
array[leftIndex] = array[rightIndex];
array[rightIndex] = temp;
}
}