从入门到精通,30天带你学会C++【第九天:排序合集】

发布时间:2023年12月26日

Everyday English

Never put off what you can do until tomorrow.?????????

今日事,今日毕。

前言

首先跟大家说声抱歉,我已经25天没写博客了,我知道我掉了很多粉丝,但是还有很多人坚持关注着我,在这里我表示感谢。

排序合集

我在网上找到了一个能演示的动画,每种排序算法只需点击‘GIF’即可演示:

排序算法大合集-biubiubiu~ - 知乎稳定的排序算法:冒泡排序、插入排序、归并排序和基数排序; 不是稳定的排序算法:选择排序、快速排序、希尔排序、堆排序 1.冒泡排序比较相邻的元素。如果第一个比第二个大,就交换他们两个。对每一对相邻元素作同…icon-default.png?t=N7T8https://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粉丝时,整个大的活,也欢迎大家点赞支持哦!

透露一下:和这个大活有关联的词:随机 粉丝 美术 挑战

欢迎大家猜一猜,好了,时间也该到了,拜拜!

文章来源:https://blog.csdn.net/m0_73787047/article/details/135114140
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。