各种排序算法,快速排序算法实例讲解

  各种排序算法,快速排序算法实例讲解

  排序算法3354快速排序

  今天介绍快速排序,这也是实践中最常用的排序算法。它既快速又高效。顾名思义,快速排序是最好的排序算法。

  想

  快速排序的思想是分而治之。

  快速排序就是找一个元素(理论上可以选任意一个)作为支点,然后对数组进行分区,使基准左侧元素的值不大于基准值,基准右侧元素的值不小于基准值,这样作为基准的元素在排序后调整到正确的位置。快速递归排序,排序后将其他n-1个元素调整到正确位置。最后,排序后每个元素都在正确的位置,排序完成。所以快速排序的核心算法是划分操作,即如何调整数据的位置和返回数据的最终位置,从而分治递归。

  比如这个可能不太好理解。假设要排序的序列是

  2 4 9 3 6 7 15首先以2为参照,用i j两个指针从两边扫描,把小于2的元素和大于2的元素分开。首先比较2和5,5大于2,J向左移动。

  2 4 9 3 6 715比较2和1,1小于2,所以把1放在2的位置。

  2 149 3 6 7 1 5比较2和4,4大于2,所以把4移到后面。

  2 149 3 674 5比较2和7,2和6,2和3,2和9,都大于2,满足条件,所以不变。

  在第一轮快速排序之后,元素变成如下

  [1] 2 [4 9 3 6 7 5]

  之后,对2左边的元素进行快速换行,由于只有一个元素,所以快速换行完成。右边快速排列,递归,最后生成最终结果。

  密码

  int quicksort(向量int v,int left,int right){

  如果(左/右){

  int key=v[left];

  int low=left

  int高=右;

  当(低高){

  while(低高v[高]键){

  高-;

  }

  v[低]=v[高];

  while(低高v[低]键){

  低;

  }

  v[高]=v[低];

  }

  v[低]=键;

  快速排序(v,左,低-1);

  快速排序(v,低1,右);

  }

  }

  分析

  快速排序的时间主要花在除法运算上,需要k-1个关键字比较来划分长度为k的区间.

  最坏的情况下,每个划分选择的基准是当前无序区域中关键字最小(或最大)的记录。结果是基准的左子区间为空(或者右子区间为空),除法得到的另一个非空子区间中的记录数只比除法前的无序区少一条。时间复杂度为O(n*n)

  在最好的情况下,每个部门采取的基准是当前无序区域的“中值”记录。结果,基准的左右无序子区间长度大致相等。关键字比较总次数:O(nlgn)

  虽然快速排序的最差时间为O(n2),但从平均性能来看,它是基于关键字比较的内部排序算法中最快的,因此得名快速排序。其平均时间复杂度为O(nlgn)。

  分类

  今天介绍快速排序,这也是实践中最常用的排序算法。它既快速又高效。顾名思义,快速排序是最好的排序算法。

  想

  快速排序的思想是分而治之。

  快速排序就是找一个元素(理论上可以选任意一个)作为支点,然后对数组进行分区,使基准左侧元素的值不大于基准值,基准右侧元素的值不小于基准值,这样作为基准的元素在排序后调整到正确的位置。快速递归排序,排序后将其他n-1个元素调整到正确位置。最后,排序后每个元素都在正确的位置,排序完成。所以快速排序的核心算法是划分操作,即如何调整数据的位置和返回数据的最终位置,从而分治递归。

  比如这个可能不太好理解。假设要排序的序列是

  2 4 9 3 6 7 15首先以2为参照,用i j两个指针从两边扫描,把小于2的元素和大于2的元素分开。首先比较2和5,5大于2,J向左移动。

  2 4 9 3 6 715比较2和1,1小于2,所以把1放在2的位置。

  2 149 3 6 7 1 5比较2和4,4大于2,所以把4移到后面。

  2 149 3 674 5比较2和7,2和6,2和3,2和9,都大于2,满足条件,所以不变。

  在第一轮快速排序之后,元素变成如下

  [1] 2 [4 9 3 6 7 5]

  之后,对2左边的元素进行快速换行,由于只有一个元素,所以快速换行完成。右边快速排列,递归,最后生成最终结果。

  密码

  int quicksort(向量int v,int left,int right){

  如果(左/右){

  int key=v[left];

  int low=left

  int高=右;

  当(低高){

  while(低高v[高]键){

  高-;

  }

  v[低]=v[高];

  while(低高v[低]键){

  低;

  }

  v[高]=v[低];

  }

  v[低]=键;

  快速排序(v,左,低-1);

  快速排序(v,低1,右);

  }

  }

  分析

  快速排序的时间主要花在除法运算上,需要k-1个关键字比较来划分长度为k的区间.

  最坏的情况下,每个划分选择的基准是当前无序区域中关键字最小(或最大)的记录。结果是基准的左子区间为空(或者右子区间为空),除法得到的另一个非空子区间中的记录数只比除法前的无序区少一条。时间复杂度为O(n*n)

  在最好的情况下,每个部门采取的基准是当前无序区域的“中值”记录。结果,基准的左右无序子区间长度大致相等。关键字比较总次数:O(nlgn)

  虽然快速排序的最差时间为O(n2),但从平均性能来看,它是基于关键字比较的内部排序算法中最快的,因此得名快速排序。其平均时间复杂度为O(nlgn)。

  分类

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • office2010激活密钥大全 怎么永久激活office2010
  • project2010产品密钥免费_project2010激活密钥永久激活码
  • c语言调用退出函数 c语言退出整个程序怎么写
  • c语言中怎么给函数初始化 c语言的初始化语句
  • c语言编写函数计算平均值 c语言求平均函数
  • chatgpt是什么?为什么这么火?
  • ChatGPT为什么注册不了?OpenAI ChatGPT的账号哪里可以注册?
  • OpenAI ChatGPT怎么注册账号?ChatGPT账号注册教程
  • chatgpt什么意思,什么是ChatGPT ?
  • CAD中怎么复制图形标注尺寸不变,CAD中怎么复制图形线性不变
  • cad中怎么创建并使用脚本文件,cad怎么运行脚本
  • cad中快速计算器的功能,cad怎么快速计算
  • cad中快速修改单位的方法有哪些,cad中快速修改单位的方法是
  • cad中心点画椭圆怎么做,cad轴测图怎么画椭圆
  • CAD中常用的快捷键,cad各种快捷键的用法
  • 留言与评论(共有 条评论)
       
    验证码: