1202:对n个数进行排序

  1. 题目来源
    2016华科计算机保研机试试题

  2. 题目要求
    输入
    输入的一行包括一个整数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!

参考:王道机试书

你可能感兴趣的:(OJ)