Java之快速排序 - Go语言中文社区

Java之快速排序


一、原理

快速排序是对冒泡排序的一种改进
下面用例子来理解快速排序
给出如下数组:
在这里插入图片描述
首先先找出一个基准数据=2,然后再数组两端设首指针和尾指针
在这里插入图片描述
然后尾指针开始扫描,遇到小于基准数据的arr[low]=arr[high] 将这个值赋值给low
在这里插入图片描述
然后首指针开始扫描,遇到大于基准数据的 arr[high] = arr[low] 将这个值赋值给high

在这里插入图片描述
然后尾指针开始扫描,此刻low=high,那么此刻这个位置就是基准数2的位置(arr[low]=2),这个位置也是2的排序后的正确位置
在这里插入图片描述
然后此刻数组被分成两个部分
在这里插入图片描述
再分别对上下两部分重复上面的操作(就可以把上下俩部分想象成是新的两个数组,然后进行操作)
直到变成一个个单个数,此时证明排序完成

二、总结

1.根据原理可以想象,快速排序,有点像选出一个基准数然后给这个基准数找到属于它的正确位置
2.不断重复,拆分成子数组,再进行,直到变成一个个单体

三、代码

public static void main(String[] args) {
    int[] arr = { 2, 0, 9 ,1, 8, 5};
    quickSort(arr, 0, arr.length - 1);//将数组、起始指针、尾指针传过去
    System.out.println("排序后:");
    for (int i : arr) {
        System.out.print(i+" ");
    }
}
    private static void quickSort(int[] arr, int low, int high) {
        if (low < high) {//low==起始指针、high==尾指针
            // 找寻基准数据的正确索引
            int index = getIndex(arr, low, high);//返回return low
            //那么运行一次之后index=返回的row;
            //然后再下面递归调用quickSort分区tmp前的部分、和后面的部分、分别再进行一次快速排序
            //进行迭代对index之前和之后的数组进行相同的操作使整个数组变成有序
            quickSort(arr, 0, index - 1);
            quickSort(arr, index + 1, high);
        }
    }
    private static int getIndex(int[] arr, int low, int high) {
        // 基准数据
        int tmp = arr[low];
        //按照顺序先从后往前,在从前往后
        while (low < high) {//low=higt证明是单个元素一组,即位置已经排好
            // 当队尾的元素大于等于基准数据时,向前挪动high指针
            while (low < high && arr[high] >= tmp) {
                high--;
            }
            // 如果队尾元素小于tmp了,需要将其赋值给low
            arr[low] = arr[high];
            //以上是从后往前
//----------------------------------------------
            //以下是从前往后
            // 当队首元素小于等于tmp时,向前挪动low指针
            while (low < high && arr[low] <= tmp) {
                low++;
            }
            // 当队首元素大于tmp时,需要将其赋值给high
            arr[high] = arr[low];
        }

        // 跳出循环时low和high相等,此时的low或high就是tmp的正确索引位置
        // 由原理部分可以很清楚的知道low位置的值并不是tmp,所以需要将tmp赋值给arr[low]
        arr[low] = tmp;
        return low; // 返回tmp的正确位置
    }
博客里也有冒泡排序的讲解哦!o(TヘTo)欢迎观看
版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/qq_43266465/article/details/103332609
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢