从入门到精通,30天带你学会C++【第九天:排序合集】
Everyday English
Never put off what you can do until tomorrow.?????????
今日事,今日毕。
前言
首先跟大家说声抱歉,我已经25天没写博客了,我知道我掉了很多粉丝,但是还有很多人坚持关注着我,在这里我表示感谢。
排序合集
我在网上找到了一个能演示的动画,每种排序算法只需点击‘GIF’即可演示:
排序算法大合集-biubiubiu~ - 知乎稳定的排序算法:冒泡排序、插入排序、归并排序和基数排序; 不是稳定的排序算法:选择排序、快速排序、希尔排序、堆排序 1.冒泡排序比较相邻的元素。如果第一个比第二个大,就交换他们两个。对每一对相邻元素作同…https://zhuanlan.zhihu.com/p/567134257那么今天我们将介绍其中的三种:冒泡排序,选择排序和直接排序(Sort)
冒泡排序
详细解释
顾名思义,每相邻两个比较一次,像冒泡一样,具体怎么比较请看例子:
初始序列:3 4 2 1
---------------第一轮---------------
第一次(比较3和4):3 4 2 1 --- 3 4 2 1
第二次(比较4和2):3 4 2 1 --- 3 2 4 1
第三次(比较4和1):3 2 4 1 --- 3 2 1 4
---------------第二轮---------------
第一次(比较3和2):3 2 1 4 --- 2 3 1 4
第二次(比较3和1):2 3 1 4 --- 2 1 3 4
---------------第一轮---------------
第一次(比较2和1):2 1 3 4 --- 1 2 3 4
冒泡排序:每次比较相邻的两个数,若第一个数大于第二个数则交换位置,每轮排完保证最大的位置正确
示范代码
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,a[1000];//n为排序的个数
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
for(int i=n;i>=1;i--)
{
for(int j=1;j<i;j++)
{
if(a[j]>a[j+1])
{
swap(a[j],a[j+1]);
}
}
}
for(int i=1;i<=n;i++) cout<<a[i]<<" ";
return 0;
}
选择排序
详细解释
顾名思义,即每个数和其他的数逐个比较(除了已经排好序的),举个栗子:
注:我个人感觉选择排序更好理解一些,我也更喜欢用选择排序
初始序列:3 4 2 1
---------------第一轮---------------
第一次(比较3和4):3 4 2 1 --- 3 4 2 1
第二次(比较3和2):3 4 2 1 --- 2?4?3?1
第三次(比较2和1):2?4?3?1 --- 1?4 3?2
---------------第二轮---------------
第一次(比较4和3):1?4?3?2?--- 1?3 4?2
第二次(比较3和2):1?3?4 2?--- 1?2?4?3
---------------第一轮---------------
第一次(比较4和3):1?2?4?3?--- 1 2 3 4
选择排序:每个数和其他的数逐个比较(除了已经排好序的),若第一个数大于第二个数则交换位置,每轮排完保证最小的位置正确
示范代码
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,a[1000];//n为排序的个数
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
for (i=1;i<=n-1;i++)
{
for (j=i+1;j<=n;j++)
{
if (a[i]>a[j])
{
swap(a[i],a[j]);
}
}
}
for(int i=1;i<=n;i++) cout<<a[i]<<" ";
return 0;
}
直接排序
直接排序直白来说就是sort了,它的功能是将一个序列从小到大排列。
示范代码
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,a[1000];//n为排序的个数
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
sort(a+1,a+n+1);
for(int i=1;i<=n;i++) cout<<a[i]<<" ";
return 0;
}
特殊
如果你想要从大到小排序,或者自己定义一种排序方法该怎么办呢?
我这里这演示从大到小的示范代码:
#include<bits/stdc++.h>
using namespace std;
bool cmp(int x,int y)
{
return x>y;
}
int main()
{
int n,a[1000];//n为排序的个数
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
sort(a+1,a+n+1,cmp);
for(int i=1;i<=n;i++) cout<<a[i]<<" ";
return 0;
}
运行结果
超大福利+结尾
这篇博客还有很多不足之处,欢迎指出。再次感谢所有粉丝对我的支持,准备到1888粉丝时,整个大的活,也欢迎大家点赞支持哦!
透露一下:和这个大活有关联的词:随机 粉丝 美术 挑战
欢迎大家猜一猜,好了,时间也该到了,拜拜!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!