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

2015.3.11面试

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

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

  和室友讨论一下,由他想出了以下的方法:按照字符串的每一位进行排序,提早结束的字符串在相应位比较时老是最小。完成后,获得的结果也即是咱们想要的了。spa

  具体代码以下:code

  

 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 }