字符串排序(非字典排序)

2015.3.11

今天阿里面试,最后给我出了一个算法题,如下:

  一个数组字符串,对其中的字符串进行排序,排序规则如下:长度越小越排在前面,长度相同则按照字符串大小排序。举个例子:“a”,"ab","Ab","b","abc",排序后 : a, b, Ab, ab, abc。

  和室友讨论一下,由他想出了如下的方法:按照字符串的每一位进行排序,提前结束的字符串在相应位比较时总是最小。完成后,得到的结果也便是我们想要的了。

  具体代码如下:

  

 1 #include <stdio.h>
 2 #include <string.h>
 3 
 4 #define N 20
 5 
 6 void strSort(char s[][N], int n)
 7 {
 8     int i,j, k = 0;
 9     char tmp[N];
10     int maxlen = 0;
11     for(i = 0; i < n; ++i)
12     {
13         if(maxlen < strlen(s[i]))
14             maxlen = strlen(s[i]);
15     }
16     while(k < maxlen)
17     {
18     for(i = 1; i < n; ++i)
19     {
20         strcpy(tmp, s[i]);
21         j = i - 1;
22         for(;;)
23         {
24             if(tmp[k] == '\0')
25                 tmp[k + 1] = '\0';
26             if(s[j][k] == '\0')
27                 s[j][k + 1] = '\0';
28             if(j < 0 || tmp[k] >= s[j][k])
29                 break;
30             strcpy(s[j + 1], s[j]);
31             j--;
32         }
33         strcpy(s[j + 1], tmp);
34     }
35     k++;
36     }
37 }
38 
39 void Sort(char s[][N], int n)
40 {
41 
42 }
43 int main()
44 {
45     char charr[][N] = {"a","ab","Ab","b","abc"};
46     strSort(charr, 5);
47     int i = 0;
48     for(i = 0; i< 5 ; ++i)
49     {
50         printf("%s\n", charr[i]);
51     }
52 }

 

转载于:https://www.cnblogs.com/zhuwbox/p/4331236.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值