纯位数排序-题解

描述

小王同学对数字特别的“敏感”
他能一眼看出一串数字的排序大小,但是这个排序是虚假的!
对于一组个数为n(1<=n<=3000)的数列,其中所有的数字均在100000的范围内;
请你编写程序,按照数字的位数进行排序,数字位数小的排前面,位数大的排后面,位数相同则保留输入的顺序不变;
输出最终的排序结果;

输入描述

输入两行
第一行一个数字n(1<=n<=3000);
第二行n个数字(均在100000内);

输出描述

输出一行,n个元素,每两个数字之间用空格隔开。

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <bits/stdc++.h>
using namespace std;

int a(int in) {
if (in == 0) return 1;
int cnt = 0;
while (in != 0) {
in /= 10;
cnt++;
}
return cnt;
}
void b(int in[],int n) {
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - i - 1; j++) {
if (a(in[j]) > a(in[j + 1])) {
swap(in[j], in[j + 1]);
}
}
}
}

int main() {
int n;
cin >> n;
int in[n];
for (int i = 0; i < n; i++) {
cin >> in[i];
}
b(in,n);
for (int i = 0; i < n; i++){
cout << in[i] << " ";
}
return 0;
}

纯位数排序-题解
https://chenxi-tijie.pages.dev/2025/07/纯位数排序-题解/
作者
chenxi
发布于
2025年7月3日
许可协议