zoukankan      html  css  js  c++  java
  • 字符串排序(非字典排序)

    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] == '')
    25                 tmp[k + 1] = '';
    26             if(s[j][k] == '')
    27                 s[j][k + 1] = '';
    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
    ", charr[i]);
    51     }
    52 }
  • 相关阅读:
    [UOJ#391]GEGEGE
    [GOODBYE WUXU][UOJ]
    codeforce 1110F
    [atcoder][abc123D]
    [atcoder][agc001]
    Luogu1070-道路游戏-动态规划
    Luogu 2577[ZJOI2005]午餐
    Luogu 1169 [ZJOI2007]棋盘制作
    Luogu 1273 有线电视网
    Luogu 2279 [HNOI2003]消防局的设立
  • 原文地址:https://www.cnblogs.com/zhuwbox/p/4331236.html
Copyright © 2011-2022 走看看