`
dieslrae
  • 浏览: 35391 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

高级排序:快速排序

    博客分类:
  • Sort
 
阅读更多
    public void quickSort(int[] array){
        this.quickSort(array, 0, array.length - 1);
    }
    
    public void quickSort(int[] array,int left,int right){
        if(right - left <= 0){
           return;
        }else{
            int partition = this.partition(array, left, right);
            
            this.quickSort(array, left, partition - 1);
            this.quickSort(array, partition + 1, right);
        }
    }

    private int partition(int[] array,int left,int right){
        int leftScan = left;
        int rightScan = right - 1;
        int middle = left + (right - left)/2;
        
        if(array[middle] < array[right] && array[middle] > array[left]){
            this.swap(array, right, middle);
        }else if(array[left] < array[right] && array[left] > array[middle]){
            this.swap(array, right, left);
        }
        
        int pivot = array[right];
        
        while(true){
            for(;leftScan <= right - 1;leftScan++){
                if(array[leftScan] > pivot)break;
            }
            
            for(;rightScan >= left;rightScan--){
                if(array[rightScan] < pivot)break;
            }
            
            if(leftScan >= rightScan){
                break;
            }else{
                this.swap(array, leftScan, rightScan);
            }
        }
        this.swap(array, leftScan, right);
        
        return leftScan;
    }
    
    private void swap(int[] array,int index1,int index2){
        int temp = array[index2];
        array[index2] = array[index1];
        array[index1] = temp;
    }


效率:
快速排序是对冒泡排序的改进,基本思想是选取一个支点,使支点左边全部小于支点,右边全部大于支点.如果支点选择不当,会造成排序极度缓慢(时间复杂度变成O(N^2)),比如选取最后边为支点而数组是逆序的.所以一般采用比较最右端,最左端和中间的元素,选择中间大小的作为支点.时间复杂度为:O(N*logN)
分享到:
评论

相关推荐

    高级算法设计实验4:快速排序

    2、熟练使用高级编程语言实现不同的快速排序算法。 3、利用实验测试给出不同快速排序算法的性能以理解其优缺点。 快速排序是算法导论中的经典算法。在本实验中,给定一个长为 n 的整数数 组,要求将数组升序排序。

    C++语言的算法实现包括插入排序冒泡排序堆排序快速排序

    本文将深入探讨四种在C++中实现的常见排序算法:插入排序、冒泡排序、堆排序和快速排序。这些算法各有特点,适用于不同的场景,理解并掌握它们对于提升编程能力至关重要。 1. **插入排序**: 插入排序是一种简单的...

    高级排序算法C++源码

    在IT领域,排序算法是计算机...通过阅读和理解`高级排序.cpp`文件,你可以了解到如何在C++中实现这些高级排序算法,并从中学习如何优化和比较排序算法的性能。这将对提升你的编程技能和理解复杂数据处理有极大的帮助。

    快速排序算法和冒泡排序效率对比

    快速排序和冒泡排序是两种常见的排序算法,它们在计算机科学中扮演着重要的角色,特别是在数据处理和优化程序性能方面。...同时,这也为我们提供了深入学习其他高级排序算法,如归并排序、堆排序等的基础。

    排序子系统 C语言版

    4. 快速排序:选取一个基准值,将数组分为小于基准和大于基准两部分,递归地对两部分进行排序。 5. 归并排序:将数组分为两半,分别排序后再合并。 6. 堆排序:构建大顶堆或小顶堆,然后将堆顶元素与末尾元素交换,...

    数据结构中排序总结:冒泡、交换、选择、插入、基数、Shell、快速、归并、堆

    6. 快速排序:快速排序使用分治策略,选取一个基准元素,将数组分为两部分,一部分小于基准,另一部分大于基准,然后递归地对这两部分进行快速排序。平均时间复杂度为O(n log n),但最坏情况下为O(n^2)。 7. 归并...

    Jquery表格排序插件,支持快速排序

    - `method`:排序算法的选择,可选`'simply'`(简单排序)或`'advance'`(高级排序,默认为快速排序)。 - `type`:数据类型,用于确定排序规则,可选`'number'`(数字排序)或`'string'`(字符串排序)。 - `attr`...

    快速排序 希尔排序 插入排序 折半排序算法

    - 由于其简单性,插入排序常用于其他高级排序算法的基础。 4. **折半排序(Binary Insertion Sort)**: - 折半插入排序是插入排序的一个变体,它在插入元素时使用二分查找来确定插入位置,从而减少比较次数。 -...

    C# 排序算法大全参考资料,比较清淅的一个版本。集中介绍了C#中的冒泡算法、选择排序、插入排序、希尔排序等常用算法,并包含示例代码和注意事项等。

    希尔排序的时间复杂度取决于增量序列的选择,通常比简单插入排序更快,但不如其他高效的排序算法(如快速排序、归并排序)。 这些排序算法各有优缺点,选择哪种算法取决于具体的应用场景。例如,对于小规模数据或...

    TIA博途中通过SCL语言实现快速排序的具体方法示例.docx

    递归排序:对分割后的两部分数组,分别调用自身进行快速排序。 d. 结束条件:当数组长度为1或0时,无需再排序,递归结束。 在TIA博途中,可以创建一个DB(Data Block)块,定义一个浮点数类型的数组,初始化数组...

    普林斯顿快速排序PPT

    ### 普林斯顿快速排序PPT核心知识点解析 #### 快速排序算法详解 ...通过以上介绍,我们不仅了解了快速排序的基本流程,还掌握了其实现方法及应用场景,这对于进一步学习其他高级排序算法也有很好的铺垫作用。

    java实现的shell排序快速排序归并排序堆排序

    本篇将详细介绍标题所提及的四种排序算法:Shell排序、快速排序、归并排序以及堆排序。 1. **Shell排序**: Shell排序是一种改进的插入排序,由Donald Shell于1959年提出。它通过设置一个间隔序列,使得数组中的...

    winform 快速排序算法源码

    快速排序是一种高效的排序算法...由于快速排序的原地排序特性(不需要额外的存储空间),它在空间效率上优于许多其他高级排序算法。在WinForm应用中,快速排序可以有效地处理大量数据的排序需求,提供良好的用户体验。

    C#中 8种初级+高级排序方法

    这里我们将探讨8种在C#中实现的初级和高级排序方法,这些方法在数据结构和算法的学习中至关重要。以下是每种排序方法的详细介绍: 1. **冒泡排序 (Bubble Sort)** 冒泡排序是最简单的排序算法之一,它通过重复遍历...

    数组与排序算法:从基础到进阶

    《数组与排序算法:从基础到进阶》是一本全面深入探讨数组基础知识和各种排序算法的实用指南。...高级技巧:探讨希尔排序、归并排序、快速排序等高级排序算法,以及它们在实际应用中的优势和局限。

    gasstationleetcode-cs102:[线性、树、图、DP]

    加油站 leetcode 课程大纲 - Java 基础 第一周 第二周 第三周 第四周 ...高级DP ...高级结构(例如段树、二叉索引树等) ...高级算法 ...高级排序:快速排序(枢轴、就地、不稳定) 高级排序:MergeSort(低+高

    【算法速成宝典】- 排序算法大揭秘:快速排序实战详解+实战题目库(积分解锁)

    本资源深度解析了快速排序算法原理及其实现步骤,涵盖从基础理论到高级技巧。提供详尽的实例解析与高质量代码示例,助力你轻松掌握快速排序,并挑战实战面试题。包含VIP专享的面试算法集锦,非零积分用户均可获取。...

    高级排序 数据结构

    在高级排序中,归并排序、堆排序、希尔排序和快速排序是四种非常重要的算法,它们各自有着独特的原理和应用。下面将详细阐述这四种排序算法。 1. **归并排序(Merge Sort)**: 归并排序是一种分治策略的典型应用。...

    六种基本排序算法,堆,归并,希尔,快速排序等

    在计算机科学中,排序算法是数据处理的重要组成部分,它们用于将一组无序的数据按照特定顺序进行排列。...了解这些基础排序算法有助于我们理解更高级的排序算法,如快速排序、归并排序的变体以及各种优化技术。

    多线程实现冒泡排序和快速排序

    本文将深入探讨如何使用多线程来实现冒泡排序和快速排序这两种经典的排序算法,这对于初学者来说是一次很好的学习机会。 首先,让我们理解冒泡排序。冒泡排序是一种简单直观的排序算法,它的基本思想是通过重复遍历...

Global site tag (gtag.js) - Google Analytics