IOT娘拿到了n个数字 � � a i ,他有一种奇妙的想法 题目描述 * 如果数字位数不同,则按数字位数从大到小排序 * 如果数字位数相同,则数字大小从小到大排序。 输入格式 第一行给出一个正整数 � n 第二行给出 � n个正整数 � � a i 输出格式 一行输出按照规则排列后的序列
时间: 2023-05-27 15:06:41 浏览: 204
算法1
(按位数从大到小排序,位数相同按大小从小到大排序)
- 先将所有数字转换为字符串,以便比较其位数和大小
- 定义一个比较函数,将两个字符串按照题目要求进行比较
- 使用快速排序对所有字符串进行排序
- 将排序好的字符串转换为数字,输出即可
时间复杂度
- 快速排序的时间复杂度为O(nlogn)
- 比较函数的时间复杂度为O(max(len(x), len(y)))
- 总时间复杂度为O(nlogn * max(len(x)))
Python 代码
n = int(input())
a = list(map(str, input().split()))
def cmp(x, y):
if len(x) != len(y):
return len(x) > len(y)
else:
return x < y
a.sort(key = cmp_to_key(cmp))
print(" ".join(a))
算法2
(按位数从大到小排序,位数相同按大小从小到大排序)
- 定义一个比较函数,将两个数字按照题目要求进行比较
- 使用快速排序对所有数字进行排序
- 输出即可
时间复杂度
- 快速排序的时间复杂度为O(nlogn)
- 比较函数的时间复杂度为O(max(log10(x), log10(y))),其中log10表示数字的位数
- 总时间复杂度为O(nlogn * max(log10(x)))
Python 代码
n = int(input())
a = list(map(int, input().split()))
def cmp(x, y):
if len(str(x)) != len(str(y)):
return len(str(x)) > len(str(y))
else:
return x < y
a.sort(key = cmp_to_key(cmp))
print(" ".join(map(str, a)))
阅读全文