博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
快速排序
阅读量:6418 次
发布时间:2019-06-23

本文共 1236 字,大约阅读时间需要 4 分钟。

快速排序是数据结构非常经典的一个排序算法,它是在1962年hoare开发的,快速排序用的也是分治的思想。下面来分析一个具体的例子吧。

有这样一个序列,我们用分治法的思想就是要找到一个基准值,进行第一次快速排序之后,这个基准值的左边都比它小,这个基准值的右边都比他的值要大,很显然这个基准值已经将这个序列分成了两个部分,然后递归再在两边分别进行同样的步骤,这个就是快速排序的思想。

                                                                                                                                 a[7]={4,2,6,3,1,7,5};

4 2 6 3 1 7 5

如何进行呢?一般都是以第一个元素为基准值,设置两个值i,j,i=0,j=n-1然后j从这个序列的最后面找到一个比基准值小的数,然后让这个数和基准值交换,即a[i]和a[j]交换知道i=j时,也就是基准值的左右两边已经相等了,下面来实际的走一下吧。

第一次:

初始化:i=0,j=6,key=4;//key代表基准值

① 从后边找一个比key小的数交换

i=0,j=4,key=4;即找到了a[4],a[0]和a[4]交换;

1 2 6 3 4 7 5

②然后再从前面开始找一个比key大的数

 i=2,j=4,key=4;a[2]和a[4]交换

1 2 4 3 6 7 5

③从后找一个比key小的数

i=2,j=3,key=4;a[2]和a[3]交换

1 2 3 4 6 7 5

④然后再从前面找一个比key大的值,

i=3;j=3,key;

因为i已经等于j了,所以第一次快速排序已经结束了,再看看我们的key=4,4的左边都是比它小的,4的右边都是比它大的。

第二次会被key分成两部分,左边和右边在进行第一次的步骤,一直递归下去,直到整个序列有序。

下面把参考代码贴在下面

#include
using namespace std;void qsort(int a[],int low,int high){ if(low>=high) return ; int i=low; int j=high; int key=a[low]; int temp; while(i
=a[i]){ i++; } temp=a[i]; a[i]=a[j]; a[j]=temp; } qsort(a,low,i-1); qsort(a,i+1,high);}int main(){ int n; cin >> n; int a[n]; for(int i=0;i
> a[i]; } qsort(a,0,n-1); for(int i=0;i

 

转载于:https://www.cnblogs.com/sddr/p/10830434.html

你可能感兴趣的文章
CentOS 7 命令行如何连接无线网络
查看>>
Ubuntu 12.04上享用新版本Linux的功能
查看>>
logstash + grok 正则语法
查看>>
Zimbra开源版(v8.6)安装说明
查看>>
Android性能优化之TraceView和Lint使用详解
查看>>
基于pgrouting的路径规划之一
查看>>
LBS核心技术解析
查看>>
Fible Channel over Convergence Enhanced Ethernet talk about
查看>>
讨论:今日头条适配方案使用中出现的问题
查看>>
CSS3 3D翻转动画
查看>>
要命啦!Word中快速录入大全,内含快捷键小技巧,快来一起学习!
查看>>
javascript实现音频mp3播放
查看>>
html5-离线缓存
查看>>
linux系统安装完后的常见工作
查看>>
在Linux服务器、客户端中构建密钥对验证进行远程连接
查看>>
揪出MySQL磁盘消耗迅猛的真凶
查看>>
和“C”的再遇
查看>>
一键安装kubernetes 1.13.0 集群
查看>>
RabbitMq的集群搭建
查看>>
spring boot + mybatis 同时访问多数据源
查看>>