美文网首页
Java——快速排序

Java——快速排序

作者: 牧歌_东 | 来源:发表于2019-01-22 21:12 被阅读0次
快速排序:该算法在数组中选择一个主元将数组一分为二。使得第一部分中的元素都小于或等于主元,第二部分中的元素都大于主元。然后对第一部分递归应用快速排序算法,对第二部分递归的应用快速排序算法。不过快速排序每次划分都将主元放在了恰当的位置,因为主元的选择直接影响了算法的性能。在理想的情况下,应该选择能平均划分两部分的主元。 7.png

这张图是算法的流程,和归并算法有些相似,都是进行了递归操作。每一次都对已经分好的一部分再一次进行重复操作下面看具体的方法:


    public static void fast(int[] arry,int first,int last) { 
        if(last > first) {
            int pivotIndex = fastvoid(arry,first,last);
            fast(arry,first,pivotIndex-1);//前半部分
            fast(arry,pivotIndex+1,last);//后半部分
        }
    }

    public static int fastvoid(int[] arry,int first,int last) {
        int privot = arry[first];
        int low = first + 1;
        int high = last;
        while(low < high) {
            /**
             * 从前向后和从后向前依次和主元比较,当前面的元素比主元大,后面的元素比主元小则这两个元素互换位置
             */
            while(low <= high && arry[low] <= privot) {
                low++;
            }
            while(low <= high && arry[high] >= privot) {
                high--;
            }
            if(high > low) {
                int temp = arry[high];
                arry[high] = arry[low];
                arry[low] = temp;
            }
        }

        while(high > first && arry[high] >= privot) {
            high--;
        }
        if(privot > arry[high]) {
            arry[first] = arry[high];
            arry[high] = privot;
            return high;
        }else {
            return first;
        }
    }

方法在数组中左侧开始查找第一个大于主元的元素,然后从数组的右侧开始查找第一个小于或等于主元的元素,最后交换这两个元素。在while循环中重复相同的查找和交换操作。直到所有的元素都查找完为止。如果主元被移动,方法返回将子数组分为两部分的主元的新下标,否则返回主元的原始下标。
快速排序和归并排序(有兴趣的可以看一下上一篇介绍归并排序的(https://www.jianshu.com/p/32b1e3b9927a))在时间方面可以说差不多是一样的,不过在空间效率方面快速排序更胜一筹,因为归并排序需要不断地新建数组,需要申请更多的资源空间,相比之下快速排序更好。

相关文章

  • 快速排序

    快速排序Java实现

  • java排序方法资料

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

  • 数据结构&算法(一)

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

  • 面试知识点

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

  • 快速排序

    手写java版快速排序算法实现

  • 常见排序的java实现

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

  • 排序

    Java 排序(这里统一做从小到大排) 快速排序 · 快速排序用分而治之的思想。对于要排序的数据,选取最左边的...

  • 排序

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

  • 常用排序算法的Java实现

    冒泡、插入、选择、归并、快速排序的Java实现

  • 排序算法Java实现

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

网友评论

      本文标题:Java——快速排序

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