package com.gpf.arithmetic;
public class QuickSort {
public static void main(String[] args) {
int [] array = {45,23,547,234,123,121};
System.out.println("排序前:");
for (int i : array) {
System.out.print(i + " ");
}
quickSort(array, 0 , array.length - 1);
System.out.println("\n排序后:");
for (int i : array) {
System.out.print(i + " ");
}
}
private static void quickSort(int[] array, int _left, int _right) {//如果left<right不成了,则递归结束-----------(递归结束条件)
int left = _left;//左边界
int right = _right;//右边界
int flag = 0;
if(left < right){
flag = array[left];//初始化左边界为标记点,并取出该值,所以此时left位置数值无效,可直接赋值
while (left < right) {//如果是小于等于的话会死循环,等于时内部不会改变left和right的值
while(left < right && array[right]>=flag){
//找到右边比标记小的数
right--;
}
if(left < right)//找到
array[left] = array[right];//此时左边的数已经取出 有一个空位置 可以直接赋值
while (left < right && array[left]<=flag) {
left++;
}
if(left < right){
array[right] = array[left];//此时right位置空 可以直接赋值
}
}//跳出循环的时候一定是left==right
array[left] = flag;//一趟排序结束 将中间值放入数组中
quickSort(array, _left, left-1);//对数组左边进行排序
quickSort(array, right+1, _right);//岁数组右边进行排序
}
}
}
算法实现Java之快速排序
最新推荐文章于 2022-05-01 01:52:25 发布