web.xml

JS判断类型的四种方法

  返回  

16【c++入门】sort排序

2021/8/21 13:19:00 浏览:

大家好我们又见面了,我们继续学习c++

大纲

1.认识sort及sort的  |起始地址|  与  |结束地址|

2.反序

3.代码

4.实例

 

1.认识sort及sort的  |起始地址|  与  |结束地址|

 

 格式:

A代表数组的名称
起始下标表示要排序的首个元素在数组中的存储下标
默认是从小到大排序的

2.反序

但是如果题目中让我们反序该怎么办呢

我们在前几节课学习了子程序

我们现在可以写一个反序的子程序

首先,如果数是整数,那么定义成int,现在我们别忘了在前面加上const(常量)哦~

这个子程序用来反序,定义成布尔类型(bool)。

定义的两个变量分别代表sort的起始与结束

返回时用return

只需这样返回

    return 第一个变量(起始)>第二个变量(结束);

即可

具体代码:

bool cmp(const int &x,const int &y){
    return x>y;
}

这样我们在sort结尾处写一个逗号和我们的cmp函数名就行了

sort(a+1,a+n+1,cmp);//这样就可以实现逆序了

3.代码

反序:

#include<bits/stdc++.h>
using namespace std;
int a[1010];
bool cmp(const int &x,const int &y){
	return x>y;
}
int main(){
	int 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;
}

正序:

#include<bits/stdc++.h>
using namespace std;
int a[1010];
int main(){
	int 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;
}

4.实例

1.小数排序并去重

题目描述

输入n个非零浮点数,把这n个浮点数从小到大输出 ,如果有相同的浮点数,则仅输出一个,字间用空格隔开。
输入格式

输入2行,第1行含1个整数n,代表浮点数的个数( n<=60 )。第2行包含n个浮点数(小数位数不超过10位数字之间用空格隔开)。
输出格式

输出1 行, 排序后的小数(数字之间用空格隔开)

 引导🔑:

使用sort进行从小到大排序,排序后相同的数都在连在一起排列的
如果要去重的输出,也就是说如果相邻的是相等的就不输出了

所以如果第i+1个数与第i个数是不相同就输出

答案:

#include<bits/stdc++.h>
using namespace std;
double a[65];
int main(){
	int 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++){
		if(a[i]!=a[i+1]){
			cout<<a[i]<<" ";
		}
	}
	return 0;
}

 

2.统计数字
题目描述

某次科研调查时得到了n个自然数,每个数均不超过1500000000(1.5*10^9)。已知不相同的数不超过10000个,现在需要统计这些自然数各自出现的次数,并按照自然数从小到大的顺序输出统计结果。

输入格式

包含n+1行;

第一行是整数n,表示自然数的个数;

第2~n+1每行一个自然数。

输出格式

包含m行(m为n个自然数中不相同数的个数),按照自然数从小到大的顺序输出。每行输出两个整数,分别是自然数和该数出现的次数,其间用一个空格隔开。

引导🔑:

题目要求按照从小到大的顺序统计出每个数字重复的次数,所以一开始先对给定的n个数按照从小到大的顺序排序,排序后相等的数都连在一起排列的
那么下一步就是数一下相邻的数重复的次数,如果后面的数字跟前面相同就计数累加,想后面的数跟前面的数
字不相同时说明前面重复的数字统计完了,输出刚刚的计数并开始下一个数相邻的重复数的统计,如此循环下去直到所有的数都统计完为止

答案:

#include<bits/stdc++.h>
using namespace std;
int a[200005];
int main(){
	int n;
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	sort(a+1,a+n+1);
	int cnt=1;
	for(int i=1;i<=n;){
		int cnt=0;
		int j=i;
		for(;;j++){
			if(a[j]==a[i]){
				cnt++;
			}
			else{
				break;
			}
		}
		cout<<a[i]<<" "<<cnt<<endl;
		i=j;
	}
	return 0;
}

好了,今天就上到这里,大家再见了!

拜拜!                                       ヾ(•ω•`)o!

联系我们

如果您对我们的服务有兴趣,请及时和我们联系!

服务热线:18288888888
座机:18288888888
传真:
邮箱:888888@qq.com
地址:郑州市文化路红专路93号