1. 程式人生 > >OpenJudge百鍊習題解答(C++)--題4085:陣列去重排序

OpenJudge百鍊習題解答(C++)--題4085:陣列去重排序

題:

總時間限制: 
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; }