给定一个非空数组(列表)
起元素数据类型为整型
请按照数组元素十进制最低位从小到大进行排序
十进制最低位相同的元素,相对位置保持不变
当数组元素为负值时,十进制最低为等同于去除符号位后对应十进制值最低位
输入描述
给定一个非空数组(列表)
其元素数据类型为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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
void PrintData(int *list, int len)
{
int i;
for (i = 0; i < len; i++) {
printf("%d ", list[i]);
}
printf("\n");
}
int GetKey(int x)
{
int data = abs(x);
return (data%10);
}
int Cmp(const void *a, const void *b)
{
int x = *(int *)a;
int y = *(int *)b;
return GetKey(x) - GetKey(y);
}
int main()
{
char s[2000] = {0};
int data[1000] = {0};
int i, idx = 0;
gets(s);
char *p = strtok(s, ",");
while (p != NULL) {
data[idx] = atoi(p);
p = strtok(NULL, ",");
idx++;
}
PrintData(data, idx);
qsort(data, idx, sizeof(int), Cmp);
PrintData(data, idx);
return 0;
}