快排代码实现如下:
/**
* 快排练习
* @author Eleven
* @version v1.0
* @date 2021 2021/10/6 19:52
*/
public class FastSortExer {
public static void main(String[] args) {
int[] numbers = {4, 1, 2, 5, 7, 4, 8, 3, 8, 4, 5, 9, 7, 3, 1};
fastSort(numbers, 0, numbers.length - 1);
System.out.println(Arrays.toString(numbers));
}
/**
* 快速排序练习
* @param numbers 需要排序的数组
* @param left 需要排序的范围的起始位置
* @param right 需要排序的范围的结束位置
* @date 2021/10/6 20:16
*/
private static void fastSort(int[] numbers, int left, int right) {
//递归出口,当起始位置大于结束位置,开始结束递归
if (left >= right) return;
//记录起始位置
int start = left;
//记录结束位置
int end = right;
//设定其实位置的元素作为目标元素,寻找该元素的正确位置
int target = numbers[left];
//开始寻找目标元素正确位置
while (start != end) {
//从后往前开始寻找,若发现比目标元素小的元素,将其放置start标记索引处
while (start < end && numbers[end] >= target) end--;
numbers[start] = numbers[end];
//从前往后寻找,若发现比目标元素大的元素,将其放置end标记索引处
while (start < end && numbers[start] <= target) start++;
numbers[end] = numbers[start];
}
//寻找结束后,start标记与end标记的索引处即为目标元素的正确位置
numbers[start] = target;
//将目标元素左边与右边的元素分别进行排序
fastSort(numbers, left, start - 1);
fastSort(numbers, start + 1, right);
}
}