简单的快速排序

/**
 * @Description 简单的快速排序
 * @auther Eleven
 * @create 2020-04-04 20:46
 **/
public class QuickSort {
    public static void main(String[] args) {
        int[] arr = new int[]{8,9,5,2,6,7,10,11};
        System.out.println(Arrays.toString(arr));
        QuickSort quickSort = new QuickSort();
        quickSort.quickSort(arr,0,arr.length-1);
        System.out.println(Arrays.toString(arr));
    }
    
    /**
     * 快速排序
     * @param arr 集合
     * @param start 开始位置的索引
     * @param end 结束位置的索引
     */
    public void quickSort(int[] arr,int start,int end){
        //递归结束的标记
        if(start>=end){
            return;
        }
        //定义集合中的一个数作为标准,这里我们取第一个数
        int flag = arr[start];
        //记录开始结束位置的索引
        int low = start;
        int high = end;
        //循环查找比标准数大和比标准数小的数字
        while (low<high){
            //右边的数组比标准数大
            while (arr[high]>=flag && low<high){
                high--;
            }
            //第一轮时,这个low索引的数据就是上面的那个flag,将右边比flag小的数据移到原先flag的位置
            arr[low] = arr[high];
            //这个时候high索引位置的数据已经给到low索引位置了,high索引位置可以放其他数据
            //处理左边比flag小的数据
            while (arr[low]<=flag && low<high){
                low++;
            }
            //将查出来比flag大的数据给到索引high的位置
            arr[high] = arr[low];
        }
        //到这里的时候说明 high的索引和low索引相等了,这个时候将flag给到high或low索引所在的位置,
        arr[low] = flag;
        //再比较左侧比flag小的数组,这个时候结束位置就变成high或low
        quickSort(arr,start,low);
        //再比较右侧比flag大的数组,这个时候起始位置就变成high或low+1
        quickSort(arr,low+1,end);
    }
}

发布了71 篇原创文章 · 获赞 8 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/system_obj/article/details/105318255
今日推荐