题目描述
给定一个非空数组(列表),其元素数据类型为整型,请按照数组元素十进制最低位从小到大进行排序,十进制最低位相同的元素,相对位置保持不变。
当数组元素为负值时,十进制最低位等同于去除符号位后对应十进制值最低位。
输入描述
- 给定一个非空数组,其元素数据类型为32位有符号整数,数组长度[1, 1000]
输出描述
- 输出排序后的数组
用例
输入 | 1,2,5,-21,22,11,55,-101,42,8,7,32 |
---|---|
输出 | 1,-21,11,-101,2,22,42,32,5,55,7,8 |
说明 | 无 |
输入 | 19,-31,10,57,61,27,11,28,-94 |
---|---|
输出 | 10,-31,61,11,-94,57,27,28,19 |
说明 | 无 |
代码
c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 获取数字的十进制最低位
int getKey(int num) {
num = abs(num); // 去除符号
return num % 10;
}
int cmp(const void *a, const void *b) {
return getKey(*(int *)a) - getKey(*(int *)b);
}
int main() {
char input[1000];
fgets(input, 1000, stdin);
input[strcspn(input, "\n")] = '\0';
char *token = strtok(input, ",");
int nums[1000];
int count = 0;
while (token != NULL) {
nums[count++] = atoi(token);
token = strtok(NULL, ",");
}
qsort(nums, count, sizeof(int), cmp);
for (int i = 0; i < count; i++) {
printf("%d", nums[i]);
if (i < count - 1) {
printf(",");
}
}
return 0;
}