# Sorting# Greedy# Comparison

a225 - 明明愛排列

🔗 前往 ZeroJudge 原題

題目描述

題目要求根據明明喜歡的方式對給定的數字序列進行排序。排序規則如下:首先,按照個位數從小到大排序。如果個位數相同,則按照數字本身從大到小排序。

解題思路

這題的核心是實現一個自定義的排序規則。我們可以使用冒泡排序或其他排序算法,但需要修改比較函數,使其符合題目的要求。具體來說,比較函數需要先比較兩個數字的個位數,如果個位數不同,則按照個位數從小到大排序。如果個位數相同,則比較兩個數字本身的大小,按照從大到小排序。

複雜度分析

  • 時間複雜度: O(n^2) (由於使用了冒泡排序)
  • 空間複雜度: O(1) (使用了常數級別的額外空間)

程式碼

#include <iostream>

using namespace std;

int main(){
	
	int a=0,tem=0;
	while(cin >> a){
		int b[a];
		for(int i=0;i<a;i++){
			cin >> b[i];
		}
		for(int i=0;i<a;i++){
			for(int j=a-1;j>i;j--){
				if(b[i]%10>b[j]%10){
					tem=b[i];
					b[i]=b[j];
					b[j]=tem;
				}
				else if(b[i]%10==b[j]%10){
					if(b[j]>b[i]){
						tem=b[i];
						b[i]=b[j];
						b[j]=tem;
					}
				}
			}
		}
		for(int i=0;i<a;i++){
			cout << b[i] << " " ; 
		}
		cout << endl;
	}
	
}

Discussion