几个简单的排序算法
来源:互联网 发布:codeblocks中文版mac 编辑:程序博客网 时间:2024/05/15 12:30
插入排序:
工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。
- #include<iostream>
- #include<cstddef>
- using namespace std;
- void swap(int &,int &);
- int main(){
- int s[10];
- //输入十个数
- cout<<"input ten numbers:"<<endl;
- for(int ix=0;ix<10;++ix)
- cin>>s[ix];
- //进行排序
- for(int m=1;m<10;++m){
- for(int n=m;n>0;--n){
- if(s[n]<s[n-1]) swap(s[n],s[n-1]);
- }
- }
- cout<<"After sort:"<<endl;
- for(int ix=0;ix<10;++ix)
- cout<<s[ix]<<endl;;
- cout<<endl;
- return 0;
- }
- void swap(int &m,int &n){
- int temp;
- temp=m;
- m=n;
- n=temp;
- }
冒泡排序:
依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。至此第一趟结束,将最大的数放到了最后。在第二趟:仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),将小数放前,大数放后,一直比较到倒数第二个数(倒数第一的位置上已经是最大的),第二趟结束,在倒数第二的位置上得到一个新的最大数(其实在整个数列中是第二大的数)。如此下去,重复以上过程,直至最终完成排序。
由于在排序过程中总是小数往前放,大数往后放,相当于气泡往上升,所以称作冒泡排序。
- #include<iostream>
- using namespace std;
- void swap(int &,int &);
- int main(){
- int s[10];
- //输入十个数
- cout<<"input ten numbers:"<<endl;
- for(size_t ix=0;ix<10;++ix)
- cin>>s[ix];
- //进行排序
- for(int i=9;i>=0;--i){
- for(int j=0;j<i;++j){
- if(s[j]>s[j+1]) swap(s[j],s[j+1]);
- }
- }
- cout<<"The sorted numbers is:"<<endl;
- for(size_t ix=0;ix<10;++ix)
- cout<<s[ix]<<"\t";
- cout<<endl;
- return 0;
- }
- void swap(int &m,int &n){
- int temp;
- temp=m;
- m=n;
- n=temp;
- }
直接利用algorithm头文件算法进行排序
- #include<iostream>
- #include<vector>
- #include<algorithm>
- using namespace std;
- int main(){
- vector<int> ivec;
- int m;
- ivec.push_back(10);
- cout<<"input numbers:"<<endl;
- while(cin>>m) ivec.push_back(m);
- sort(ivec.begin(),ivec.end());
- cout<<"After sort():"<<endl;
- for(vector<int>::iterator ix=ivec.begin();ix<ivec.end();++ix)
- cout<<*ix<<endl;
- return 0;
- }
选择排序:
每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。
- #include<iostream>
- using namespace std;
- void swap(int&,int&);
- int main(){
- //输入一个数组
- int n,ix=0;
- int s[100];
- cout<<"input some numbers:"<<endl;
- while(cin>>n) {
- s[ix]=n;
- ix++;
- }
- //进行排序
- for(int i=0;i<ix-1;++i){
- int pos=i;
- for(int j=i;j<ix;++j)
- if(s[j]<s[pos]) swap(s[j],s[pos]);
- }
- cout<<"After sort:"<<endl;
- for(int i=0;i<ix;++i)
- cout<<s[i]<<endl;
- }
- void swap(int &m,int &n){
- int temp=m;
- m=n;
- n=temp;
- }
0 0
- 几个简单的排序算法
- 几个简单的排序算法
- 几个简单的排序算法
- 几个简单的排序算法
- 几个简单排序算法
- 几个简单的排序算法实现
- 几个简单的排序
- lua 实现的几个简单的排序算法
- 几个简单的排序算法(java版)
- 几个简单的算法
- 几个经典的排序算法
- 几个常用的排序算法
- 几个常用的排序算法
- 几个基础的排序算法
- 几个普通的排序算法
- 几个简单常用的算法
- 几个简单常用的算法
- 几个简单有趣的算法
- cocos2d-x 二进制文件的读写
- ORACLE CHECKPOINTS
- ios下的精确定时(代码示例)
- Android 使用NineOldAndroids实现绚丽的ListView左右滑动删除Item效果
- eclipse启动tomcat出现内存溢出错误 java.lang.OutOfMemoryError: PermGen space
- 几个简单的排序算法
- 黑马程序员——IO复习小结(二)
- 最大公约数(欧几里得算法)
- 进程地址空间
- libevent源码深度剖析二
- mysql主从配置成功后无法同步
- poj1947 Rebuilding Roads 树形背包
- 戏说java web开发中的listener和filter
- 几种常用排序算法图解