HUT 排序训练赛 A-第二小整数

Time Limit: 1000MS   Memory Limit: 32768KB   64bit IO Format: %I64d & %I64u

[]   [Go Back]   [Status]  

Description

求n个整数中倒数第二小的数。
每一个整数都独立看成一个数,比如,有三个数分别是1,1,3,那么,第二小的数就是1。
 

Input

输入包含多组测试数据。
输入的第一行是一个整数C,表示有C测试数据;
每组测试数据的第一行是一个整数n,表示本组测试数据有n个整数(2<=n<=10),接着一行是 n个整数 (每个数均小于100);
 

Output

请为每组测试数据输出第二小的整数,每组输出占一行。
 

Sample Input

2 2 1 2 3 1 1 3
 

Sample Output

2 1
 

Source

绍兴托普信息技术职业技术学院――第二届电脑文化节程序设计竞赛

 

【题目来源】

http://acm.hust.edu.cn/vjudge/contest/view.action?cid=41455#problem/A

【题目大意】

求n个整数中倒数第二小的数。也就是一个简单地排序问题。

题目有一句话很关键:每一个整数都独立看成一个数,比如,有三个数分别是1,1,3,那么,第二小的数就是1。

由这句话可以看出,不需要进行去重处理,问题就变得简单多了,直接从小到大排序输出第二个数即可。

这场小比赛的目的主要是让我们学会各种排序,所以就不用qsort函数了,自己写一个快排。(虽然这题的数据用冒泡也无压力)

源代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<ctime>
#include<algorithm>
using namespace std;
int cmp(int data[], int begin, int end)
{
    int mid = begin - 1;
    for (int i= begin; i < end; i++)

    {
        if (data[i] < data[end])
            swap(data[++mid], data[i]);
    }
    swap(data[++mid], data[end]);
    return mid;
}
void quickSort(int data[], int begin, int end)
{
    if (begin<end)
    {
        int mid = cmp(data, begin, end);
        quickSort(data, begin, mid - 1);
        quickSort(data, mid + 1, end);
    }
}
int main()
{
    int a[15];
    int i;
    int c;
    int n;
    cin>>c;
    while(c--)
    {
        cin>>n;
        for(i=0;i<n;i++)
            cin>>a[i];
        quickSort(a,0,n-1);
        cout<<a[1]<<endl;
    }
    return 0;
}

 

你可能感兴趣的:(排序)