zoukankan      html  css  js  c++  java
  • 快速排序理论---不含源码

    |   版权声明:本文为博主原创文章,未经博主允许不得转载。

      快速排序的基本的思想是选择一个中轴值,然后将待排序列根据中轴值的大小分成两部分,一部分比关键字小,放在关键字的左边,一部分比关键字大,放在关键字的右边;然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序的序列。

      复杂度:快速排序的平均运行时间为θ(nlogn)。

      快速排序原理图:

                         

      原理:首先,选择一个序列中的节点作为基准,以此基准的数值作为大小比较,然后设置两个变量i,j记录当前的位置下标,同时赋初值 i = 0,j = n-1; j下标从当前序列的位置向左扫描,与基准值急性比较,越过大于基准值的节点(j--),当遇到小于基准值的节点时,扫描停止,交换i和j位置对应的值。如果j和i交换之后,在将 i下标从当前位置向右扫描,同样与基准值进行比较,越过小于基准值的节点。当遇到大于基准值的节点时,扫描停止,交换i和j位置对应的值。然后在从j的当前位置向左扫描重复上述步骤, 然后,继续扫描,直至 i 与 j 相遇为止。扫描和交换的过程结束。这是 i 左边的记录的关键字值都小于基准值,右边的记录的关键字值都不小于基准值。字面上理解有点模糊,下面通过表格详细的演示一下快速排序的过程。

      设待排序列为:49  38  65  97  76 13  27  49 

      第一步:初始关键字,这里选择第一个数49,作为基准值。i = 0,j = 7

    49 38 65 97 76 13 27 49

      第二步:49 = 49,不需交换位置。 j--, 下一步比较 27 和 49。i = 0, j = 7

    49 38 65 97 76 13 27 49

      第三步:27 < 49,左向扫描,交换两个数的位置。 i++, 下一步比较 38 和 49。i=0,j=6

    27 38 65 97 76 13 49 49 

      第四步:38 < 49, 右向扫描,小于基准值,不需交换位置。 i++,下一步比较 65 和 49。i=1,j=6

    27 38 65 97 76 13 49 49

      第五步:65 > 49, 右向扫描, 大于基准值,交换位置。 j--, 下一步比较 13 和 49。i=2,j=6

    27 38 49 97 76 13 65 49

       第六步:13 < 49, 左向扫描,小于基准值,交换位置。i++,下一步比较 97 和 49。i=2,j=5

    27 38 13 97 76 49 65 49

      第七步:97 > 49, 右向扫描, 大于基准值, 交换位置。 j--, 下一步比较 49 和 76。i = 3,j = 5

    27 38 13 49 76 97 65 49

      第八步:49 < 76,左向扫描, 大于基准值, 位置不需交换。 j--。i = 3,j = 4 

    27 38 13 49 76 97 65 49

       第九步:此时 i = j = 3.第一趟排序结束。i=3,j=3

    27 38 13 49 76 97 65 49

                                         

      第一趟排序的结果为:27,38,13,49,76,97,65,49。之后的再次进行排序,直到序列有序位置。

  • 相关阅读:
    SSH_框架整合2—查询显示
    SSH_框架整合1
    eclipse中tomcat发布失败(Could not delete May be locked by another process)原因及解决办法
    错误:javax.servlet.jsp.PageContext can not be to a type
    链表【6】
    欢迎使用CSDN-markdown编辑器
    剑指offer系列62---两个链表的公共结点
    剑指offer系列61---数组中的逆序对
    Git常用命令大全
    vue脚手架搭建的具体步骤
  • 原文地址:https://www.cnblogs.com/geore/p/5894592.html
Copyright © 2011-2022 走看看