算法篇之快速排序
来源:互联网 发布:阿里云选择镜像 编辑:程序博客网 时间:2024/06/05 10:47
最近一直在学习java,昨天才弄完课程设计,做了一个简陋的计算器,进入收尾工作了。今天用c++实现了快速排序(久违了,c++......)
快速排序是排序算法的一种,基本思想是“照着标准挑石头”:假设有一列重量不等的石头,对其进行操作,想要得到的最终结果是这列石头按照重量递增的顺序排列。怎么做呢?首先,随意取其中的一块石头a1(假设取第一块)以其总量作为标准,在剩余的石头中,把比标准石头轻的放到它的左侧,把比标准石头重的放到它的右面,完成这个操作后得到这样的结果:a1的左侧全是比它轻的石头(假设为集合leftrock),a1的右侧全是比它重的石头(假设是集合rightrock)。下面该运用递归的思想,对于leftrock 选取其中一个(al1)作为标准,比al1轻的放到它的左面,比它重的放到它的右面;对rightrock执行同样的操作,然后还是递归了......
重点在执行一次挑石头时候具体怎么操作。下面以数组的形式表示一下。
假设有数组a[7]
下标 0 1 2 3 4 5 6
数值 3 7 4 6 1 5 2
i-> <-j
以key=a[0]=3 为标准,从j开始往左遍历(感觉着样特别好,相当于a[0]的位置空出来了,要找一个数值填补a[0]的空缺,a[0]在左面,是相应的小值区域,所以要从右面往左遍历),把右面 ( 大值区域 )比a[0]小的值放到a[0]的位置上,这样,右面又空出来一个大值的位置,这时候要从左面开始找,把左面的比a1大的值放到那个空位上(因为大值的地盘在右面),依次重复,直到i和j相等,达到第一次操作的结果。
具体代码如下:
#include <iostream>using namespace std;void SubQuickSort(int a[],int begin,int end){ int k=a[begin]; int i=begin; int j=end; static int count; if(begin<end){ while(j>i){ while(a[j]>k&&j>i){--j;} a[i]=a[j]; while(a[i]<k&&j>i){++i;} a[j]=a[i]; } a[j]=k; } cout<<"第"<<++count<<"次排序的结果是:"; for(int i=0;i<7;++i) cout<<a[i]; cout<<endl; if(j>begin&&j<end){ SubQuickSort(a,begin,j-1); SubQuickSort(a,j+1,end); }}int main(){ int a[7]={3,7,4,6,1,5,2}; SubQuickSort(a,0,6); for(int i=0;i<7;++i) cout<<a[i]<<" "; return 0;}
- 算法篇之快速排序
- 算法基础之排序篇-快速排序
- 算法之快速排序
- 算法之快速排序
- 算法之快速排序
- 算法之快速排序
- [算法]之快速排序
- 算法之--快速排序
- 算法之快速排序
- 算法之快速排序
- 算法之快速排序
- 算法之快速排序
- 算法之快速排序
- 算法之快速排序
- 排序算法之快速排序
- 排序算法之快速排序
- 排序算法之快速排序
- 排序算法 之 快速排序
- 第九周项目5——利息计算器
- CentOS 备忘
- Ubuntu搭建SVN服务器
- 索引概念及创建
- JFreeChart使用示例(入门级)
- 算法篇之快速排序
- vim显示行号、自动缩进的设置
- 分布式文件系统发展史
- 调用类的时候使用的类方法和SEL
- 自己设计的程序
- C++ vector容器类型
- 矩阵 快速幂
- Cocos2d-x 零散知识点辑录
- BS中保存参数