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 }