当前位置:网站首页> 经验杂谈>正文

数据结构快速排序讲解 这几步你要了解

发布于:2021-01-12 16:46:34发布者:天晴问友| 评论:0条

对于计算机专业的大学生而言,快速排序是大家必须掌握的一种排序算法,但是快速排序理解起来不是那么容易,因此很多同学刚接触时不大明白,自己针对自己的理解用比价浅显的语言来讲解一下,让大家能够很容易学懂。

操作方法

01

快速排序作为和冒泡排序相同类型的排序(同为交换类排序),之所以能够被人们所熟知,是因为它解决了冒泡排序只用来对相邻两个元素进行比较,因此在互换两个相邻元素时只能消除一个逆序,而快速排序是通过两个不相邻元素的交换,来消除待排序记录中的多个逆序。即快速排序中的一趟交换可以消除多个逆序。具体思想:从待排序记录中选取一个记录(通常选取第一个记录,当然也可采用随即划分的方式,这样能大大提高快速排序的执行效率,如我们所熟知的在O(n)的时间复杂度内找出前k元的算法),将其关键字记为K1,然后将其余关键字小于K1的记录移到前面,而大于关键字K1的移到后面,一趟快速排序之后,将待排序序列划分为两个子表,最后将关键字K1插到这两个子表的分界线的位置。具体实现就是用三层while循环,最外层的while循环控制该趟快速是否进行,而内层的两个while循环一个用来从左到右扫描大于该趟基准记录关键字的元素,一个用来从右到左扫描小于该趟基准记录的关键字的元素,可以用两个指针low和high指向当前从左到右和从右到左扫描的当前记录的关键字,找到一个就将其交换。以上是一趟快速排序的思想,对上述划分后的子表重复上述过程,直至划分后的子表的长度不超过1为止。即为快速排序的思想,从定义可知快速排序是一个递归排序。具体代码如下:
#include<iostream>
using namespace std;
const int len=7;
int qk(int a[],int low,int high)//注意快速排序函数的参数,因为每一趟快速排序的作用是要将数组分割为两个部分,前面一部分不大于K,后面一部分不小于K,然后在                                //对前一部分和后一部分继续进行快速排序,所以,qk的第二个参数与第三个参数应为low与high
{
int x=a[low];//选取第一个元素作为基准记录
while(low<high)
{
while(low<high&&a[high]>=x)
high--;
if(low<high)
{
a[low]=a[high];
low++;
}
while(low<high&&a[low]<=x)
low++;
if(low<high)
{
a[high]=a[low];
high--;
}
}
a[low]=x;
return low;
}
void qsort(int a[],int low,int high)
{
if(low<high)
{
int pos=qk(a,low,high);
qsort(a,low,pos-1);
qsort(a,pos+1,high);
}
}
void main()
{
int a[len]={7,4,5,1,2,3,6};
cout<<"快速排序后的结果为:"<<endl;
qsort(a,0,len-1);
for(int i=0;i<len;i++)
{
cout<<a[i]<<' ';
}
cout<<endl;
}
复杂度分析:快速排序最好的情况就是每一趟排序将序列划分为两个部分,正好在表中间将表划分为两个大小相等的子表,类似于折半查找,此时复杂度为O(nlog2n).
最坏的情况就是已经排好序,则第一趟经过n-1次比较,第一个记录定在原位置,左部子表为空表,右部子表为n-1个记录,第二趟n-1个记录经过n-2次比较,第二个记录定在原位置.....即此时快速排序内层中的两个while循环不执行,此时快速排序退化为冒泡排序,总的比较次数为n*(n-1)/2,复杂度为O(n*n).

好了,以上就是大致内容了,(END)

像所有的排序算法一样,注意使用数组时的边界条件的判断,不能越界,否则运行会报错

相关经验+更多
  • 武汉越王勾践剑交通卡怎么获得

    武汉最近推出了立体交通卡,名叫“越王勾践剑”,光听名字就觉得很霸气。相信很多小伙伴想获得,接下来小编就为你带来武汉越王勾践剑交通卡购买的方法。武汉越王勾践剑交通卡怎么获得1、微信搜索“武汉通行”,点击武汉通行公众号2、点击进入公众号3、点击框中所指位置4、进入文章页面,找到立即购买点击就能下单了5、使用须知想要第一时间了解玩机技巧、app教程吗?那么关注天晴下载准没错,网站每天都会分享热门的教程哦

  • 苹果2021秋季发布会新品有哪些

    苹果2021秋季发布会有哪些新品?万众期待的发布会在本月15日将会举行,iPhone13的推出大家早就已经了解了,那么还有哪些新品会出现呢?接下来小编带来了详细全面的新品介绍,别错过了哦!苹果2021秋季发布会新品有哪些时间:2021.9.15地点:总部 Apple Park直播网址:请点击新产品:IPhone 13 系列此前对于这个系列早就已经官宣过了,推陈出新,不论是从外观、内部功能、续航能力

  • 小米商城学生认证怎么弄

    近日小米商城上线了感恩活动,只要是符合条件的大学生就可以获得相关的福利。那么我们该如何证明自己的学生身份呢?方法还是比较多样的,有需要的可以看看接下来的内容哦!小米商城学生认证怎么弄学信网认证登录自己的学信网,输入相关的密码,然后找到自己的大学生在线验证报告即可。或者登录小米商城,点击学生,然后输入姓名、身份证号、手机号和学信网的验证码也可以哦!输入验证码,然后等待工作人员验证成功以后就可以领取该

  • 华为个性化后壳怎么定制

    我们很多人在购买手机时都会看中后壳颜色,喜欢不同颜色的用户有时可能会因为颜色不全,而放弃购买,华为新推出了“个性化后壳”服务,可以满足用户们更换后壳的需要,实现颜色自选,快来看看后壳支持哪些型号吧。华为个性化后壳服务是什么昨日有网友发现,在华为官网上新推出了“个性化后壳”服务项目,对于很多人来说手机后壳非常容易摔坏,或者是自己看腻了后壳颜色,可以通过自费进行后壳更换,再也不用自己买后膜贴在手机上了

经验评论

评论列表(条(包括审核中))