资讯专栏INFORMATION COLUMN

Java排序算法之——快速排序

Yangyang / 3118人阅读

摘要:代码片段语言组织能力有限,直接上代码排序算法之快速排序参数为需要排序的数组参数为数组的起始下角标即参数为数组的最后下角标即经过一轮排序,已经将数组分为左右两部分进行递归排序总结快速排序的精髓在于分治思想,分而治之,它的时间复杂度为。

算法简述

所谓快速排序算法是基于交换排序和递归思想的,它的速度的确如名字所示——快!并且这种一算一般被用作数量级比较大的数据当中,在大数据中有着很重要的地位。

算法流程

下面是快速排序算法的流程:
1、首先设定一个分界值(一般都是取中间或者第一个数),通过该分界值将数组分成左右两部分; 2、将数组中大于等于分界值的数值放在分界值的右边,将数组中小于等于分界值的数值放在分界值的左边;
3、然后左右两边的数组又可以按照这个方式进行独立排序;
4、重复这个过程,可以看出这是一种递归的思想,当递归到最后,整个数组也就排序完成;

实例讲解

下面通过一个例子来讲解一下:对数组int[] arr = {34,25,65,33,16,78,43,22}进行快速排序

取33为分界值,用i,j两个引用从两端进行遍历,i从左边依次遍历直到找出比33大的数34(即arr[0]),j从右依次遍历直至找到比33小的数22(即arr[7])交换这两个数的位置:

{22,25,65,33,16,78,43,34}

然后i向右移,j向左移进行遍历,经过一轮后:{22,25,16,33,65,78,43,34}

接下来通过递归调用,将左右数组进行排序。

代码片段

语言组织能力有限,直接上代码:

/**
     * 排序算法之快速排序
     * 参数arr为需要排序的数组
     * 参数left为数组的起始下角标即0
     * 参数right为数组的最后下角标即arr.length-1
     */
    private void quickSort(int[] arr,int left,int right)
    {
        int f,t;
        int rtemp,ltemp;
        ltemp = left;
        rtemp = right;
        f = arr[(left+right)/2];
        //经过一轮排序,已经将数组分为左右两部分
        while(ltempf)
            {
                --rtemp;
            }
            if(ltemp<=rtemp)
            {
                t = arr[ltemp];
                arr[ltemp] = arr[rtemp];
                arr[rtemp] = t;
                --rtemp;
                ++ltemp;
            }
        }
        if(ltemp == rtemp)
        {
            ltemp++;
        }
        //进行递归排序
        if(left
总结

快速排序的精髓在于分治思想,分而治之,它的时间复杂度为O(nlog2n)。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/64400.html

相关文章

  • 算法学习路,排序快速排序Java实现)

    摘要:接下来我来说明快速排序的思路以及实现的代码。快速排序思路首先是定义一个变量,把数组的第一个元素的值赋给,然后定义两个变量指向数组的第一个元素和最后一个元素。 今天突然想写个排序,以前写过,然后写了之后一直出错,然后自己百度了一下,看了别人写的方法,自己也尝试着写了一个。接下来我来说明快速排序的思路以及实现的代码。 快速排序思路:首先是定义一个变量key,把数组的第一个元素的值赋给key...

    charles_paul 评论0 收藏0
  • JavaScript算法 ,Python算法,Go算法,java算法,C#算法系列插入排序

    摘要:常见的内部排序算法有插入排序希尔排序选择排序冒泡排序归并排序快速排序堆排序基数排序等。插入排序在实现上,通常采用排序即只需用到的额外空间的排序,因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。 常见的内部排序算法有:插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。用一张图概括: showImg(https://segm...

    GeekQiaQia 评论0 收藏0
  • JavaScript算法 ,Python算法,Go算法,java算法,C#算法系列插入排序

    摘要:常见的内部排序算法有插入排序希尔排序选择排序冒泡排序归并排序快速排序堆排序基数排序等。插入排序在实现上,通常采用排序即只需用到的额外空间的排序,因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。 常见的内部排序算法有:插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。用一张图概括: showImg(https://segm...

    cgspine 评论0 收藏0
  • JavaScript算法 ,Python算法,Go算法,java算法,C#算法系列插入排序

    摘要:常见的内部排序算法有插入排序希尔排序选择排序冒泡排序归并排序快速排序堆排序基数排序等。插入排序在实现上,通常采用排序即只需用到的额外空间的排序,因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。 常见的内部排序算法有:插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。用一张图概括: showImg(https://segm...

    lufficc 评论0 收藏0

发表评论

0条评论

Yangyang

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<