题目来源
2016华科计算机保研机试试题
题目要求
输入
输入的一行包括一个整数n,接下来的一行包括n个整数。
输出
可能有多组测试数据,对于每组数据,将排序后的n个整数输出,每个数后面都有一个空格。每组测试数据的结果占一行。
样例输入:
4
1 4 3 2
样例输出:
1 2 3 4
本题是将输入的n个数进行排序后再按要求的格式输出,默认为是升序,如果要求降序需写一个降序函数。
最常用的我们就是使用冒泡排序,题目要求n最大是100,那么时间复杂度就是O(100*100),空间复杂度是O(100),满足要求。
要求变量:
- n:输入的整数的个数;
- Buf[100]:存储输入的数据;
AC代码:
#include
#include
int main()
{
int n; //定义要输入的数字的个数
int buf[100]; //存储输入的数据
while(scanf("%d",&n)!=EOF){
for(int i=0;iscanf("%d",&buf[i]);
}//输入带排序的数字
for(int i=0;ifor(int j=0;j1-i;j++){
if(buf[j]>buf[j+1]){
int temp = buf[j];
buf[j] = buf[j+1];
buf[j+1] = temp;
}
}
}//冒泡排序主体
for(int i=0;iprintf("%d ",buf[i]);
}//输出排序的的结果,注意格式,每个数字后要添加一个空格
printf("\n");//输出换行
}
return 0;
}
/*
4
1 2 4 3
*/
这里需要我们自己写排序函数部分,我们也可以使用C++库中的自带的排序函数,只需在头文件中加入
#include
然后在函数主题中引用函数sort(begin,end)即可,如果要进行降序输出,我们要将排序后的结果倒置,函数为:
//进行降序
bool cmp(int x,int y){
return x>y;
}
重载sort函数:sort(buf,buf+n,cmp);
那么那么C++库中的sort函数是一个怎样的形式呢?查阅资料来看一下,具体链接是:sort函数定义:
微软给出了一个实例程序,通过代码我们很容易的明白怎么使用sort函数:
// alg_sort.cpp
// compile with: /EHsc
#include
#include
#include // For greater( )
#include
// Return whether first element is greater than the second
bool UDgreater ( int elem1, int elem2 )
{
return elem1 > elem2;
}
int main( )
{
using namespace std;
vector <int> v1;
vector <int>::iterator Iter1;
int i;
for ( i = 0 ; i <= 5 ; i++ )
{
v1.push_back( 2 * i );
}
int ii;
for ( ii = 0 ; ii <= 5 ; ii++ )
{
v1.push_back( 2 * ii + 1 );
}
cout << "Original vector v1 = ( " ;
for ( Iter1 = v1.begin( ) ; Iter1 != v1.end( ) ; Iter1++ )
cout << *Iter1 << " ";
cout << ")" << endl;
sort( v1.begin( ), v1.end( ) );
cout << "Sorted vector v1 = ( " ;
for ( Iter1 = v1.begin( ) ; Iter1 != v1.end( ) ; Iter1++ )
cout << *Iter1 << " ";
cout << ")" << endl;
// To sort in descending order. specify binary predicate
sort( v1.begin( ), v1.end( ), greater<int>( ) );
cout << "Resorted (greater) vector v1 = ( " ;
for ( Iter1 = v1.begin( ) ; Iter1 != v1.end( ) ; Iter1++ )
cout << *Iter1 << " ";
cout << ")" << endl;
// A user-defined (UD) binary predicate can also be used
sort( v1.begin( ), v1.end( ), UDgreater );
cout << "Resorted (UDgreater) vector v1 = ( " ;
for ( Iter1 = v1.begin( ) ; Iter1 != v1.end( ) ; Iter1++ )
cout << *Iter1 << " ";
cout << ")" << endl;
输出结果为:
Original vector v1 = ( 0 2 4 6 8 10 1 3 5 7 9 11 )
Sorted vector v1 = ( 0 1 2 3 4 5 6 7 8 9 10 11 )
Resorted (greater) vector v1 = ( 11 10 9 8 7 6 5 4 3 2 1 0 )
Resorted (UDgreater) vector v1 = ( 11 10 9 8 7 6 5 4 3 2 1 0 )
这里还用到了有关集合的一些知识。
代码在进行逆序输出时用了两种方法,一种类似于上面cmp函数的方法,另一个是使用内置的greater Struct, greater和less是头文件中定义的两个结构。下面看它们 的定义,greater和less都重载了操作符(),通过在sort函数中调用来进行内置的降序,
sort( v1.begin( ), v1.end( ), greater<int>( ) );
注意使用时要加入头文件functional和引用标准命名空间std!
参考:王道机试书