java排序(快速排序)

作者: z七夜 | 来源:发表于2018-05-24 20:22 被阅读16次

快速排序

思路

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

实现

数组:[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交换,然后再次开启循环,就会死循环,

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

相关文章

  • java排序方法资料

    java排序,效率高的是哪种排序方法 JAVA快速排序(高效) java中常用的几种排序算法 相关代码: /* *...

  • 数据结构&算法(一)

    一、Java实现快速排序算法 二、Java实现折半插入排序算法 三、Java实现冒泡排序算法

  • 面试知识点

    排序冒泡排序快速排序选择排序插入排序二路归并 查找二分查找 排序和查找的java实现 java语言Java字符串字...

  • 常见排序的java实现

    常见排序的java实现 常见排序java实现 插入排序(二分插入排序) 希尔排序 快速排序(三数中值快排) 冒泡排...

  • 排序算法Java实现

    本文会通过Java语言实现:冒泡排序,插入排序,选择排序,归并排序,快速排序,桶排序,计数排序,基数排序,希尔排序...

  • Java基础01 冒泡排序

    冒泡排序 Java中有很多种排序:冒泡排序、快速排序、选择排序、插入排序、希尔排序,甚至还有基数排序、鸡尾酒排序、...

  • 快速排序

    快速排序Java实现

  • 实现几种常见排序方法

    Java实现几种常见排序方法 日常操作中常见的排序方法有:冒泡排序、快速排序、选择排序、插入排序、希尔排序,甚至还...

  • 十大经典排序算法(java实现)

    前言 本文我们将以java代码实现十大经典排序算法,包括冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序...

  • 排序

    八大排序算法 一、归并排序 递归及非递归的JAVA实现 二、快速排序 快排算法JAVA实现 三、堆排序 堆排序堆排...

网友评论

    本文标题:java排序(快速排序)

    本文链接:https://www.haomeiwen.com/subject/cucejftx.html