排序

这些代码示例展示了如何使用C++实现选择排序、字符串排序、绝对值排序以及日期排序。此外,还包含了一个日期排序的示例,通过自定义排序函数比较MM/DD/YYYY格式的日期。所有代码均利用了标准库中的`sort`函数,并提供了自定义比较函数来满足特定排序需求。
摘要由CSDN通过智能技术生成

排序

1.

题目描述

用选择法对10个整数从小到大排序。

输入

输入10个无序的数字

输出

排序好的10个整数

样例输入

4 85  3 234 45 345 345 122 30 12

样例输出

3
4
12
30
45
85
122
234
345
345
#include<iostream>
#include<algorithm>
using namespace std;

int cmp(int num1, int num2)//<号是从小到大排序
{
	return num1 < num2;
}

int main()
{
	int arr[10];
	for (int i = 0; i < 10; i++)
	{
		cin >> arr[i];
	}
	
	sort(arr, arr + 10, cmp);
	
	for (int i = 0; i < 10; i++)
	{
		cout << arr[i]<<endl;
	}
}

2.

题目描述

输入三个字符串,按由小到大的顺序输出

输入

 3行字符串 

输出

按照从小到大输出成3行

样例输入

cde
afg
abc

样例输出

abc
afg
cde
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
	string s1, s2, s3;
	vector<string>s;
	cin >> s1 >> s2 >> s3;
	s.push_back(s1);
	s.push_back(s2);
	s.push_back(s3);
	sort(s.begin(), s.end());
	cout << s[0] << endl;
	cout << s[1] << endl;
	cout << s[2] << endl;
}

3.

题目描述

输入n(n<=100)个整数,按照绝对值从大到小排序后输出。
题目保证对于每一个测试实例,所有的数的绝对值都不相等。

输入

输入数据有多组,每组占一行,每行的第一个数字为n,接着是n个整数,
n=0表示输入数据的结束,不做处理。

输出

对于每个测试实例,输出排序后的结果,两个数之间用一个空格隔开。
每个测试实例占一行

样例输入

3 3 -4 2
4 0 1 2 -3
0

样例输出

-4 3 2
-3 2 1 0
#include<iostream>
#include<vector>
#include<algorithm>
#include<cmath>
using namespace std;
bool cmp(int num1, int num2)
{
	return abs(num1) > abs(num2);
}
int main()
{
	int n;
	int arr[10];
	while (cin>>n)
	{
		if (n == 0)
			break;
		for (int i = 0; i < n; i++)
		{
			cin >> arr[i];
		}
		sort(arr, arr + n, cmp);
		for (int i = 0; i < n; i++)
		{
			cout << arr[i] << " ";
		}
		cout << endl;
	}
}

4.

题目描述

将一正整数序列{K1,K2,...,K9}重新排列成一个新的序列。
新序列中,比K1小的数都在K1的前面(左面),比K1大的数都在K1的后面(右面)。

输入

输入有多行,第一行为N表示行数,每行9个整数.

输出

输出N行,按要求进行排序的结果.

样例输入

2
6 8 9 1 2 5 4 7 3
3 5 8 9 1 2 6 4 7

样例输出

3 4 5 2 1 6 8 9 7
2 1 3 5 8 9 6 4 7
#include<iostream>
#include<vector>
#include<algorithm>
#include<cmath>
using namespace std; 
int main()
{
	int a,i=0;
	int arr[9], dp[100];
	cin >> a;
	while ((i++) < a)
	{
		for (int i = 0; i < 9; i++)
		{
			cin >> arr[i];
		}
		for (int i = 8; i >=0; i--)
		{
			if (arr[0] > arr[i])
				cout << arr[i] << " ";
			else
				dp[i] = 1;
		}
		for (int i = 0; i < 9; i++)
		{
			if (dp[i] == 1)
				cout << arr[i] << " ";
		}
		cout << endl;
	}
}

5.

题目描述

有一些日期,日期格式为“MM/DD/YYYY”。编程将其按日期大小排列。

输入

输出

样例输入

15/12/1999
10/21/2003
10/22/2003
02/12/2004
11/30/2005
12/31/2005

样例输出

15/12/1999
10/21/2003
10/22/2003
02/12/2004
11/30/2005
12/31/2005
#include<iostream>
#include<vector>
#include<algorithm>
#include<cmath>
#include <iomanip>
using namespace std;
struct data
{
	int MM;
	int DD;
	int YYYYY;
	char c;
}stu[100];

int cmp(struct data n1, struct data n2)
{
	if(n1.YYYYY!=n2.YYYYY)
		return n1.YYYYY < n2.YYYYY;
	else if (n1.MM != n2.MM)
		return n1.MM < n2.MM;
	else if (n1.DD != n2.DD)
		return n1.DD < n2.DD;
}

int main()
{
	int n=0;
	while (cin >> stu[n].MM >> stu[n].c >> stu[n].DD>> stu[n].c >> stu[n].YYYYY)
	{
		n++;
	}
	sort(stu, stu + n, cmp);
	for (int i = 0; i < n; i++)
	{
		cout << setfill('0') << setw(2) << stu[i].MM << stu[i].c << setfill('0') << setw(2) << stu[i].DD << stu[i].c << setfill('0') << setw(4) << stu[i].YYYYY << endl;
	}
	return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值