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

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 }

 

你可能感兴趣的:(字符串)