资讯专栏INFORMATION COLUMN

java排序算法(快速排序)

khlbat / 3013人阅读

摘要:快速排序思路在数组中寻一中间数,将比中间数小的放在左边,将比中间数大的放在右边从左边开始找,找到比中间数大的,记住,从右边开始找,找到比中间数小的,然后交换两边然后在左边再寻一中间数,同坐上面的事,右边也一样,然后循环实现数组输出中间值的位

快速排序 思路

在数组中寻一中间数,将比中间数小的放在左边,将比中间数大的放在右边
从左边开始找,找到比中间数大的,记住,从右边开始找,找到比中间数小的,然后交换两边
然后在左边再寻一中间数,同坐上面的事,右边也一样,然后循环

实现

数组:[2,6,3,6,5,9,1]
输出:[1 2 3 5 6 6 9 ]

private static void paixu(int[] arrs, int h, int e) {
        int head =h;
        int end = e;

        int x=(h+e)/2;//中间值的位置

        while (h <= e){//两个指针还没有遇到

            while (arrs[x]>arrs[h]){//从左边开始找,找到比中间值大的数
                h++;
            }

            while (arrs[x]< arrs[e]){//从右边开始查找,找到比中间值小的
                e--;
            }
            //交换值
            int m;
            m = arrs[h];
            arrs[h] = arrs[e];
            arrs[e] = m;        //2,6,3,6,5,9,1
            h++;                //2,1,3,6,5,9,6
            e--;                //2,1,3,5,6,9,6

        }
        //递归查询左右两边
        if (head < e){
        paixu(arrs,head,e);}
        if (end > h){
        paixu(arrs,h,end);}
    }

为什么会有h++,e--呢
跟一下代码
输入数组[2,6,3,6,5,9,1]
第一次运行
中间位置是3,值是6
左边是0,右边是6

往下执行

h=1,e=6
数组变成[2,1,3,6,5,9,6]

执行加减操作 h=2,e=5;然后开启第二轮的执行

假如不进行加减操作,
继续执行的话,左边继续判断,当查询到6的时候停止,
右边查询,查询到6的时候停止,然后交换,6和6交换,然后再次开启循环,就会死循环,

当执行加减操作之后,再次判断的时候,就会从交换数据之后的索引开始判断,就不会再次判断了,

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

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

相关文章

  • Java数据结构与算法——快速排序

    摘要:快排是一种不稳定的排序算法,在经过排序后,等值的元素的相对位置可能发生改变。 声明:码字不易,转载请注明出处,欢迎文章下方讨论交流。 前言:Java数据结构与算法专题会不定时更新,欢迎各位读者监督。本篇文章介绍排序算法中最常用也是面试中最容易考到的排序算法——快排,包括快排的思想和原理、java快排代码、快排的特点性能和快排的适用场景。 0、其他排序算法索引(待更) java数据结构与...

    Panda 评论0 收藏0
  • Java排序算法之——快速排序

    摘要:代码片段语言组织能力有限,直接上代码排序算法之快速排序参数为需要排序的数组参数为数组的起始下角标即参数为数组的最后下角标即经过一轮排序,已经将数组分为左右两部分进行递归排序总结快速排序的精髓在于分治思想,分而治之,它的时间复杂度为。 算法简述 所谓快速排序算法是基于交换排序和递归思想的,它的速度的确如名字所示——快!并且这种一算一般被用作数量级比较大的数据当中,在大数据中有着很重要的地...

    Yangyang 评论0 收藏0
  • Java面试题:稳定和不稳定排序算法之间的区别-MergeSort与QuickSort

    摘要:稳定与不稳定算法示例以下图片解释了稳定和不稳定的排序是如何工作的这就是稳定和不稳定排序算法之间的区别。稳定排序算法的一些常见示例是合并排序,插入排序和冒泡排序。 showImg(https://segmentfault.com/img/remote/1460000018913243); 来源 | 愿码(ChainDesk.CN)内容编辑 愿码Slogan | 连接每个程序员的故事 网...

    wanghui 评论0 收藏0
  • 算法学习之路,排序快速排序Java实现)

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

    charles_paul 评论0 收藏0
  • 七大排序算法总结(java)

    摘要:前面介绍了七大算法的思想与实现步骤,下面来做一个归总。直到无序区中的数为零,结束排序。步骤以从小到大为例,排序数组大小为。比较完以后则排序结束。堆排序思想堆排序是采用树的形式的数据结构来进行排序的,其中每一个堆都是完全二叉树。 前面介绍了七大算法的思想与实现步骤,下面来做一个归总。 排序方法 平均复杂度 最坏复杂度 最好复杂度 辅助空间 稳定性 直接选择排序 O(n^2...

    cartoon 评论0 收藏0

发表评论

0条评论

khlbat

|高级讲师

TA的文章

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