排序算法
来源:互联网 发布:网络保本理财产品排行 编辑:程序博客网 时间:2024/06/04 19:13
排序的方法有很多,各有优劣。这里介绍四种简单的排序算法。
首先读入n(n<=20)个整数并存入数组a[ ]中。
int a[20],n;cin>>n;for(int i=0;i<n;i++)cin>>a[i];
方法一:选择法排序(升序排列)
基本思路:0、从a[0]~a[n-1]这n个数中找出最小的数,和a[0]交换;
1、从a[1]~a[n-1]这n-1个数中找出最小的数,和a[1]交换;
………………………………………………………………
n-2、从a[n-2]~a[n-1]这2个数中找出最小的数,和a[n-1]交换。(一共要找n-1次)
代码实现:
for(int i=0;i<n-1;i++)//一共循环n-1次 { int k=i; //k用来记录最小数的下标,初始为当前下标 for(int j=i+1;j<n;j++) /*从a[i+1]~a[n-1] 找出其中的最小值, if(a[j]<a[k]) k=j;把下标赋值给k (若需要降序排列,把<改成>即可*/ int temp=a[k]; a[k]=a[i]; a[i]=temp;//最小值与a[i]交换位置 }
方法二:冒泡法排序(升序排列)
基本思路:1、从数组a[0]到a[n-1],把相临的两个数两两进行比较。即a[0]和a[1]比较,比较完后a[1]再与a[2]比较,……最后是a[n-2]和a[n-1]比较。
2、在每次进行比较的过程中,如果前一个数比后一个数大,则对调两个数。
3、上述过程已经把n个数中最大的数放到了a[n-1]中,再重复上述算法,把a[0]到a[n-2]中最大的数放到a[n-2]中,这样 a[n-2]中存放的就是第二大的数;……
代码实现:
for(int i=0;i<n-1;i++){ for(int j=0;j<n-1-i;j++)//-i是因为随着循环的进行,最后几个数都已经确定了 { if(a[j]>a[j+1])//如果前一个数大于后一个数,则交换。若需要降序排列,把>改成<即可{int temp=a[j];a[j]=a[j+1];a[j+1]=temp; } }}
方法三:插入法排序(升序排列)
基本思路:1、第一个输入的数作为a[0],
2、之后每输入一个数,从最后一个数向前依次和数组的元素比较,
3、若新输入的数比当前数组元素a[i]小,则把该数组元素向后移动一个a[i+1]=a[i];否则表示新输入的数比该数组前面的数都要大,则插入当前位置的下一个a[i+1]
代码实现:
int N,n,x,i,a[20];/* N表示输入的元素个数;n用来记录已输入的元素个数; cin>>N; x用来暂时存储新输入的数 */ cin>>a[0]; n=1;//第一个输入的数作为a[0] while(n<N){ cin>>x; for(i=n-1;i>=0;i--)//从最后一个数开始向前移动 if(x<a[i]) a[i+1]=a[i];//依次和新输入的数比较。若比较大,则往后移一个; else break;//否则退出循环,表示新输入的数比前面的数都大 a[i+1]=x;//直接存入数组的当前位置 n++;//数组个数+1 }
方法四:使用排序函数sort() (虽然方便,但是不推荐啊。初学者还是最好自己动手写一下,不要偷懒哦)
首先要
#include<algorithm>然后只要
sort(a,a+n);//a表示数组名,n表示要排序的元素个数(其实是begin和end)就排序完成了。
注意,该函数默认升序排列。
降序排列的方法:
首先要自己写一个比较函数
bool cmp(int a,int b)//compare {return a>b; //降序排列(第一个参数大于第二个参数),如果改为return a<b,则为升序排列 }然后只要
sort(a,a+n,cmp);//a表示数组名,n表示要排序的元素个数(其实是begin和end),cmp表示排序方式就排序完成了。
以上。
0 0
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- UDP实现图片群发
- 筛选列表中的数据
- 插件化 加载资源的核心代码
- Sphinx实时索引,用增量索引实现索引更新
- 指针实现strlen函数
- 排序算法
- 时序数据监控系统Influxdb+Grafana+Fluented
- vue脚手架 使用npm run dev 遇到的错误问题
- 基于SSH框架的增删改查实例附带源码
- shell脚本的三种执行方式
- eclipse中用jdbc连接mysql数据库的操作
- Oracle SQL 基本操作之 用户权限管理方法
- Spring Boot + WebSocket Demo
- 指针的复习