前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >快速排序

快速排序

作者头像
Java架构师必看
发布2021-04-30 15:48:11
5480
发布2021-04-30 15:48:11
举报
文章被收录于专栏:Java架构师必看Java架构师必看

快速排序

强烈推介IDEA2020.2破解激活,IntelliJ IDEA 注册码,2020.2 IDEA 激活码

快速排序(QuickSort)是对冒泡排序的一种改进。基本思想是:通过一趟排序将需要排序的数据分成独立两部分,其中一部分的所有数据都比另一部分的所有数据都要小,然后再按照此方法对这两组数据分别进行快速排序,这个排序过程可以递归进行,以此达到整个数据变成有序序列。

一、基本介绍


快速排序是实践中的一种快速的排序算法,在对 Java基本类型的排序中特别有用。它的平均运行时间是

O(NlogN)
O(NlogN)

。该算法之所以特别快,主要是由于非常精练和高度优先的内部循环(递归)。它的最坏情形性能为

O(N^2)
O(N^2)

,但进行简单修改就可以使该情形极难出现。下面描述最常见的快速排序的实现 “经典快速排序”。原理视频:链接

二、快速排序代码演示


首先理解快速排序的思想,继而根据思想编写代码即可。

代码语言:javascript
复制
/**
 * 快速排序:思想:先将最后一个元素获取出来,作为枢纽元(pivot),开始移动左右指针
 */
public class QuickSort {

    public static void main(String[] args) {
        Integer[] a = {44,33,66,2,4,88,44,62,49,23,43,89,50};
        //Integer[] a = {44,44,44,44,44,44,44,44,44,44,44,44,50};
        new QuickSort().sort(a,0,a.length-1);
        List<Integer> ints = Arrays.asList(a);
        for(int i: ints){
            System.out.printf(i + "   ");
        }
    }

    //传入目标数组,左索引和右索引
    public void sort(Integer[] arr , int left, int right){
        int l = left;
        int r = right-1;

        //当 left < right 的情况下进行无限循环
        while(left < right && l >= 0 && r >= 0 && l < right && r < right){

            //循环获取 l > 最后一个元素的数据
            while(arr[l] < arr[right]){
               l++;
            }

            //循环获取 R < 最后一个元素的数据,这里添加等于是防止大量相同的元素的时候,r和l指针都不移动则会出现问题;
            while(arr[r] >= arr[right] && r > 0){
                r--;
            }

            //如果l 与 r 指针符合逻辑则交换彼此的数据
            if(l < r){
                //交换数据
                swap(arr , l, r);
             //如果两个相等,或者l > r 那么就说明比较结束,交换 l 与枢纽元 pivot
            }else{
                swap(arr , l, right);
                //递归调用:对最左边的进行排序,l是当前的中间值
                //注意这里不要使用 --l 因为 --l 会改变l的值,举个例子,L=6时,--L后l=5 L-1 后 L=6 ,我们后面的 l+1需要初始的L值所以,不要使用 L--
                sort(arr , left, l-1);
                //递归调用:对最右边的进行排序,l是当前的中间值
                sort(arr , l+1,right);
                break;
            }
        }
    }
    //交换方法
    public void swap(Integer[] arr ,int i,int j){
        int temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、基本介绍
  • 二、快速排序代码演示
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档