C++实现快速排序
来源:互联网 发布:sql 比较运算符 编辑:程序博客网 时间:2024/05/22 10:53
#include <iostream>using namespace std;int a[1005];int temp;int Partition(int a[],int low,int high){ int i=low,j=high,pivot=a[low]; //用序列的第一个元素作为基准元素 while(i<j){ //从序列的两端交替向中间扫描,直至i等于j为止 while(i<j&&a[j]>=pivot) j--; if(i<j) //表示找到了<prvot的元素 swap(a[i++],a[j]); while(i<j&&a[i]<=pivot) i++; if(i<j) //表示找到了>prvot的元素 swap(a[i],a[j--]); } return j; //返回 i==j的那个结点}void QuickSort(int a[],int low,int high){ //对a[low,high]快速排序' //cout<<"low :"<<low<<"high:"<<high<<endl; int prvotpos; if(low<high){ //仅当区间长度大于1时才排序 prvotpos=Partition(a,low,high); //对a[low,high]做划分 //递归对左区间和右区间进行排序 QuickSort(a,low,prvotpos-1); //对左区间递归排序 QuickSort(a,prvotpos+1,high); //对右区间进行排序 }}int main(){ int n; cin>>n; for(int i=0;i<n;i++){ //初始化数组 cin>>a[i]; } QuickSort(a,0,n-1); for(int i=0;i<n;i++){ cout<<a[i]<<' '; }}
分治法实现快排过程详解
45
23
65
57
18
2
90
84
12
76
i
j
序列的第一个元素是基准元素:
所以45是基准元素pivot=45
从右向左进行比较,如果大于privot,j--,直到找到a[j]<privot, i++,a[i],与a[j]交换位置因为12<45所以下面进行交换
45
23
65
57
18
2
90
84
12
76
i
j
12
23
65
57
18
2
90
84
45
76
i
j
接下来从左向右进行比较,如果小于privot=45,i++,直到找到a[i]>privot=45,a[i]与a[j]交换位置,因为23<45,i++,i直到65,65>45开始交换,j减1
12
23
65
57
18
2
90
84
45
76
i
j
12
23
45
57
18
2
90
84
65
76
i
j
接下来从右向左开始比较,84>privot=45,所以j--,继续查找小于45的,找到了2,所以j指向2所在的位置,开始进行交换,i++
12
23
45
57
18
2
90
84
65
76
i
j
12
23
2
57
18
45
90
84
65
76
i
j
接下来从左边开始比较,57>privot=45,所以a[i]与a[j]开始交换,并且j--,交换结果:
12
23
2
45
18
57
90
84
65
76
i
j
接下来从右边开始比较,a[j]=18<45,a[i]与a[j]开始交换,并且i++,交换以后结果
12
23
2
18
45
57
90
84
65
76
i j
此时i==j 不满足循环条件i<j,所以跳出循环,return j=4
然后以45为界限左边是比45小的,右边是比45大的,所以继续分成两部分再进行比较
左边部分
12
23
2
18
右边部分
57
90
84
65
76
12
23
2
18
左边部分开始循环
此时基准元素是第一个12,所以privot=12,由于18>12所以j--,
12
23
2
18
i
j
12
23
2
18
i
j
从右向左开始,18>12,所以j--,j指向2,然后2<12,开始交换,然后i++,交换后结果:
2
23
12
18
i
j
从左向右开始比较,23>12,所以开始交换,然后j--,交换结果:
2
12
23
18
i j
由于i==j所以循环结束,跳出循环
右边部分也是同样道理实现的,然后一直分治下去。
我整了好长时间又是困在了递归上面,所以,递归这一块还需要多多理解。
- 快速排序c实现
- 快速排序C实现
- 快速排序C实现
- 快速排序C实现
- 快速排序(C实现
- 快速排序 C语言实现
- 快速排序C语言实现
- 快速排序算法(c#)实现
- c语言实现快速排序
- C/C++实现快速排序
- C语言实现快速排序
- 快速排序实现(C语言)
- 快速排序C语言实现
- Xcode(C++) 快速排序实现
- C语言实现快速排序
- 快速排序C语言实现
- 快速排序C语言实现
- C语言实现快速排序
- HDU-1242 Rescue
- 捕抓和记录SQL发生的死锁信息
- 工作十年,我是如何达到年薪40W以上
- DL学习笔记【18】nn包中的各位Criterions
- Hive-视图
- C++实现快速排序
- 数据结构实例<八>(IsUgly 丑数)容易
- Java File类和IO流
- 微信通信协议,用自己的程序收发微信,微信网页web版分析
- 计算机网络常见面试题
- Java 变量-基本类型
- 半导体设备数据Handshake
- Collection接口常用方法
- 强化学习读书笔记