您的位置:首页 > 编程语言 > C语言/C++

OpenJudge百炼习题解答(C++)--题4085:数组去重排序

2016-02-22 20:23 323 查看

题:

总时间限制: 1000ms 内存限制: 1000kB

描述

小吉是银行的会计师,在处理银行帐目的时候,遇到了一些问题。有一系列整数,其中含有重复的整数,需要去掉重复后,排序输出,你能帮助小吉解决问题吗?

输入输入数据共2行,第一行输入测试数据个数n,第二行输入这n个整数,整数之间可能有重复,整数之间可能有若干个空格。

n <= 105,所有的整数不超过104。
输出输出为1行,是这n个数去重后从小到大的排序。
样例输入:
3
4 4 2


样例输出:
2 4


解:

#include<iostream>
using namespace std;
void Qsort(int a[], int low, int high)
{
    if(low >= high)
    {
        return;
    }
    int first = low;
    int last = high;
    int key = a[first];/*用字表的第一个记录作为枢轴*/
 
    while(first < last)
    {
        while(first < last && a[last] >= key)
        {
            --last;
        }
 
        a[first] = a[last];/*将比第一个小的移到低端*/
 
        while(first < last && a[first] <= key)
        {
            ++first;
        }
         
        a[last] = a[first];    
/*将比第一个大的移到高端*/
    }
    a[first] = key;/*枢轴记录到位*/
    Qsort(a, low, first-1);
    Qsort(a, first+1, high);
}

int main()
{
	int n;
	cin>>n;
	int a[n];
	for(int i=0;i<n;i++)
	{
		cin>>a[i];
	}
	Qsort(a,0,n-1);

	cout<<a[0]<<" "; 
	for(int i=1;i<n;i++)
	{
		if(a[i]!=a[i-1])
		{
			cout<<a[i]<<" ";
		 } 
	}
	return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: