2.数列排序
资源限制
内存限制:512.0MB C/C++时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s
问题描述
给定一个长度为n的数列,将这个数列按从小到大的顺序排列。1<=n<=200
输入格式
第一行为一个整数n。
第二行包含n个整数,为待排序的数,每个整数的绝对值小于10000。
输出格式
输出一行,按从小到大的顺序输出排序后的数列。
样例输入
5
8 3 6 4 9
样例输出
3 4 6 8 9
我当时的写法(有点笨,但是能对)
#include<iostream>
using namespace std;
int main()
{
int n,a[1000];
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
for(int i=1;i<=n;i++)
{
for(int j=i+1;j<=n;j++)
{
if(a[i]>=a[j])
{
int t=a[i];
a[i]=a[j];
a[j]=t;
}
}
}
for(int i=1;i<=n;i++)
{
cout<<a[i]<<" ";
}
return 0;
}
好绕啊,emmm或许我可以再改进一下
利用sort函数求解
不包含第三个参数时(默认从小到大排序)
#include<bits/stdc++.h>
using namespace std;
int main()
{
int a[1000],n;
cin>>n;
for(int i=0;i<n;i++)
cin>>a[i];
sort(a,a+n);
for(int i=0;i<n;i++)
cout<<a[i]<<" ";
return 0;
}
看,这样看来简单多了吧
包含第三个参数时
#include<bits/stdc++.h>
using namespace std;
int main()
{
int a[1000],n;
cin>>n;
for(int i=0;i<n;i++)
cin>>a[i];
sort(a,a+n,less<int>());
for(int i=0;i<n;i++)
cout<<a[i]<<" ";
return 0;
}
本质上和刚刚一样
sort(a,a+n);
变成
sort(a,a+n,less<int>());
这种带了第三个参数,就可以特定这个数组是从小到大排序了
对了,刚刚测试的时候,我还发现,前面代码中
for(int i=0;i<n;i++)
是不可以想当然的换成
for(int i=1;i<=n;i++)
的,具体原因我还不太清楚,如果这样写,排不了序,只能从0开始
排序从大到小(两个参数时)
这里主要是引入了
bool complare(int a,int b)
{
return a>b;//这是从大到小,如果改一下,变成a<b,就是从小到大
}
下面是相关应用:
#include<bits/stdc++.h>
using namespace std;
bool complare(int a,int b)
{
return a>b;
}
int main()
{
int a[1000],n;
cin>>n;
for(int i=0;i<n;i++)
cin>>a[i];
sort(a,a+n,complare);//在这里就不需要对complare函数传入参数了,//这是规则
for(int i=0;i<n;i++)
cout<<a[i]<<" ";
return 0;
}
如果是三个参数
#include<bits/stdc++.h>
using namespace std;
int main()
{
int a[1000],n;
cin>>n;
for(int i=0;i<n;i++)
cin>>a[i];
sort(a,a+n,greater<int>());
for(int i=0;i<n;i++)
cout<<a[i]<<" ";
return 0;
}
主要是改变的这里
sort(a,a+n,greater<int>());
这样,这个题的几种做法就写完了
从小到大 | sort(a,a+n) |
---|---|
从小到大 | sort(a,a+n,less<int>()) |
从大到小 | sort(a,a+n,greater<int>()) |
对了,它还可以给字符排序,同样的方法,那我就来试一下吧!
#include<bits/stdc++.h>
using namespace std;
int main()
{
char a[1000];
int n;
cin>>n;
for(int i=0;i<n;i++)
cin>>a[i];
sort(a,a+n,greater<int>());
for(int i=0;i<n;i++)
cout<<a[i]<<" ";
return 0;
}