# Sorting# Counting# Array

d587 - 參貳壹真好吃

🔗 前往 ZeroJudge 原題

題目描述

題目要求將一個由 1、2、3 組成的數列按照從小到大的順序輸出。

解題思路

這題的解題思路是統計數列中 1、2、3 分別出現的次數,然後按照 1、2、3 的順序輸出對應次數的數字。由於題目保證輸入數列只包含 1、2、3,因此只需要簡單的計數和輸出即可。

複雜度分析

  • 時間複雜度: O(n)
  • 空間複雜度: O(1)

程式碼

#include <iostream>

using namespace std;

int main (){
	
	int n=0;
	int x=0;
	int b=0;
	int c=0;
	while (cin >> n){
		int a[n];
		for(int i=0;i<n;i++){
			cin >> a[i];
			if(a[i]==1){
				x++;
			}
			if(a[i]==2){
				b++;
			}
			if(a[i]==3){
				c++;
			}
		}
		for(int i=0;i<x;i++){
			cout << 1 << " ";
		}
		for(int i=0;i<b;i++){
			cout << 2 << " ";
		}
		for(int i=0;i<c;i++){
			cout << 3 << " ";
		}
		cout << endl;
	int x=0;
	int b=0;
	int c=0;
	}
}

Discussion