`
daojin
  • 浏览: 695196 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

排序算法复习之一趟快速排序算法:为什么说关键字所占的位置是多余的

阅读更多

思路:

         49  38   65  97 76 13 27

先说自己的想法:

 

首先看38,发现38比49小,所以换位:

 

        38 49 65  97 76 13 27 

 

这个时候发现65,按理说应该把65放最后面,或者说与27交换位置,变为:

 

        38  49 27 97 76 13 65

 

这个时候,发现27,27比49小,所以交换位置为:

 

       38 27 49  97 76 13 65

 

这个时候发现97,我们换97与后面比49小的。

 

       38  27 49 13 76 97 65

这个时候发现13,我们换:

 

        38 27 13 49 76 97 65

 

后面没有比49 小的了。终止。

 

我们发现:

         每次我们总是从前面找一个比49大的,,从后面找一个比49小的,然后调换他们的位置。

         

         我们发现:这个49所占的位置,是多余的,这个位置可以用来进行交换高低位:

 

再次变为如下过程:

 

        49 38 65 97 76 13 27

 

先从后往前找:

 

        找到一个27,比49 小,序列变为:

 

        27 38 65 97 76 13 27

 

然后从前往后找:

 

       找到一个65,比49大,这个时候把最后一个变为65:

 

       27 38 65 97 76 13 65

 

关键之处就在于:黄色字所表示的地方正是原来49所占的位置。

 

再从后往前找。。再找一个比49小的,那就是13:

 

      变为:

 

         27 38 13 97 76 13 65

 

再从前往后找:

 

         找到97比49大,那么,变为:

 

         27 38 13 97 76 97 65

 

再从后往前找,一直找到橙色97为止:也就是low的指向:

 

直到 low=high

       这就是快速排序一趟,这个时候我们将橙色97置为49,函数返回它的位置作为分割点。设为partitio

 

(low,partition-1) 和 (partition,high)两个区间。

 

 

 

 

 

 

分享到:
评论

相关推荐

    7.1_内部排序算法排序.CPP

    1)问题描述:输入一组关键字序列分别实现下列排序。 (1)实现简单选择排序、直接插入排序和冒泡排序。 (2)实现希尔排序算法。 (3)实现折半插入排序。 (4)实现快速排序算法。 (5)实现堆排序算法...

    快速排序算法的java实现

    快速排序是一种高效的排序算法,由英国计算机科学家C.A.R. Hoare在1960年提出。它的基本思想是分治法(Divide and Conquer),通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的...

    多关键字排序 多关键字排序

    在计算机科学和编程领域,多关键字排序是一种处理数据集合的重要技术,它允许我们根据不止一个属性或关键字对数据进行排序。这种排序方法广泛应用于数据库、数据分析、信息检索等多个场景,帮助用户更有效地查找和...

    内部排序算法比较 课程设计

    【内部排序算法比较课程设计】主要关注的是对六种经典的内部排序算法的性能对比,包括起泡排序、直接插入排序、简单选择排序、快速排序、希尔排序和堆排序。这些算法是计算机科学中用于对数据进行排序的基础工具,各...

    多关键字排序的程序设计

    - 快速排序是一种非常高效的排序算法,采用分治法的思想。 - 它选择一个“基准”元素,通过一趟排序将待排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这...

    快速排序算法实现 c#代码

    - **时间复杂度**:平均情况下,快速排序的时间复杂度为O(n log n),这是所有比较排序算法中最好的情况之一。在最坏的情况下,即初始序列已经有序时,时间复杂度退化为O(n²)。为了减少这种情况的影响,可以通过随机...

    分别使用Java和Python实现快速排序算法.zip

    快速排序:分别使用Java和Python实现快速排序算法.zip 快速排序:分别使用Java和Python实现快速排序算法.zip 快速排序:分别使用Java和Python实现快速排序算法.zip 快速排序:分别使用Java和Python实现快速排序算法....

    数据结构课设报告 关键字排序 随机数产生

    冒泡排序是一种简单的排序算法,通过重复遍历列表,比较相邻元素并交换位置来排序。它会重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。遍历数列的工作是重复地进行直到没有再需要...

    内部排序算法的性能分析

    Hoare提出的快速排序是一种分治算法,通过选取一个“枢轴”元素并将其与其他元素分割开,使得一半元素小于枢轴,另一半元素大于枢轴,然后再对两半分别进行排序。平均时间复杂度为O(n log n),最坏情况(已排序或...

    快速排序算法演示(PPT).rar

    快速排序是一种高效的排序算法,由英国计算机科学家C.A.R. Hoare在1960年提出。它的基本思想是分治法(Divide and Conquer),将一个大问题分解为两个或更多的小问题来解决。在快速排序中,我们选择一个基准元素,...

    2009软考程序员:排序算法的各趟排序算法

    在计算机科学领域,排序算法是数据结构与算法中不可或缺的一部分,尤其对于程序员来说,理解和掌握各种排序算法至关重要。2009年的软考程序员考试中,排序算法是重点考察的知识点之一,它涉及到多趟排序的过程,即...

    常用的排序算法总结(各种内部排序算法和外部排序算法)

    排序算法是计算机科学中最基础和重要的算法之一,用于将一组数据按照特定的顺序进行排列。本文将对几种常见的内部排序算法和外部排序算法进行详细总结。 首先,排序的基本定义是:给定一个包含n个记录的序列,其...

    7.2_排序计算次数.cpp

    1)问题描述:输入一组关键字序列分别实现下列排序。 (1)实现简单选择排序、直接插入排序和冒泡排序。 (2)实现希尔排序算法。 (3)实现折半插入排序。 (4)实现快速排序算法。 (5)实现堆排序算法...

    冒泡、快速排序算法比较程序.zip_快速排序算法_排序算法比较_数据结构课程设计

    它的基本思想是:选择一个基准元素,通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,然后分别对这两部分记录继续进行排序,以达到整个序列有序。 **冒泡排序** 的优点...

    插入,选择排序的链表实现及快速,希尔,冒泡排序算法实现合集

    Hoare提出的,它采用分治法的思想,选取一个基准元素,通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,然后再分别对这两部分记录进行快速排序。`QuickSort.cpp`文件...

    详解Java常用排序算法-快速排序

    快速排序(Quick Sort)是一种分治思想的排序算法,它的基本思想是通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,然后再分别对这两部分记录继续进行排序,以达到...

    快速排序算法程序

    快速排序是一种高效的排序算法,由英国计算机科学家C.A.R. Hoare在1960年提出。它的基本思想是分治法(Divide and Conquer),通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的...

    排序算法汇总(选择排序 ,直接插入排序,冒泡排序,希尔排序,快速排序,堆排序)

    本资源介绍了六种常用的排序算法:选择排序、直接插入排序、冒泡排序、希尔排序、快速排序和堆排序。下面对每种算法进行详细介绍: 选择排序 选择排序是一种简单的排序算法。其思想是:在要排序的一组数中,选出...

    快速排序算法java代码

    快速排序算法是由Tony Hoare在1960年提出的一种排序算法,它的平均时间复杂度为O(n log n),是目前最快的排序算法之一。下面我们将详细地讲解快速排序算法的java代码实现。 快速排序算法的基本思想 快速排序算法的...

    7大排序算法实现程序(快速排序,冒泡排序,选择排序,归并排序,插入排序,希尔排序,堆排序)

    2. 冒泡排序:是最简单的排序算法之一,通过不断交换相邻位置的元素来逐渐达到排序的目的。每一轮遍历都能确保最大(或最小)的元素被放置到正确的位置,重复这个过程直到整个数组排序完成。 3. 选择排序:每次从未...

Global site tag (gtag.js) - Google Analytics