这是知乎上面的一个题目,挺有意思,面试的时候应该是作为基础题,很多人不屑于看这样的题目,但是到自己些的时候,就会有很多问题。
题目要求
输入一个数3256,将他从小到大输出,就是2356
分析
输入的是字符,我们这里就只分析了int类型不考虑其他字符了。
代码如下:
#include <stdio.h>
#include <string.h>
/*
二进制 |十进制 |十六进制 | 字符
0011 0000 48 30 0
0011 0001 49 31 1
0011 0010 50 32 2
0011 0011 51 33 3
0011 0100 52 34 4
0011 0101 53 35 5
0011 0110 54 36 6
0011 0111 55 37 7
0011 1000 56 38 8
0011 1001 57 39 9
*/
void sort(char *nums,unsigned char *output,size_t len);
int main(int argc, char const *argv[])
{
char nums[100];
unsigned char output[10] = {0};/*0~9*/
int i = 0;
gets(nums);
sort(nums,output,strlen(nums));
//printf("\n");
for(i = 0;i<10;i++)
{
while(output[i] --) printf("%c",i+0x30);
}
getchar();
return 0;
}
void sort(char *nums,unsigned char *output,size_t len)
{
int i = 0;
for(i = 0;i<len;i++)
{
output[nums[i] - 0x30]++;
//printf("%d,",nums[i] - 0x30);
}
}
代码很简单,把对应的字符ascii码转成 0~9的整型,然后使用计数排序,也就是每个位置判断一下,如果这个位置是1,就把这个位置的数值加1。
输出