【问题标题】:Sort (alphabetically) a matrix of strings using a Merge Algorithm in C使用 C 中的合并算法对字符串矩阵进行排序(按字母顺序)
【发布时间】:2020-11-09 09:32:16
【问题描述】:

我正在尝试以字母顺序排序的方式将字符串矩阵(大小 r 行和 c 列)合并到单个字符串数组(大小 r*c)中,问题是我的算法只是对其进行部分排序并且没有得到结果数组索引的正确值。

行本身已经排序,这意味着对于每一行,该行中的字符串已经按字母顺序排列。

排序算法效率太低。

示例:(当然我必须使用更大的矩阵)。

fbc zfb

abc tuv

结果数组:

abc 脸书 电视 zfb

这是我的(错误的)函数:

void orderMat(char ***mat, int r, int co)
{
    int i,a=0,b=0,c=0; char **c1;

    c1=malloc( (r*co)*sizeof(char *) );




    for(i=0;i<(r-1);i++)
    {  a=0;b=0;
        while(a<co && b<co)
        {
            if(strcmp(mat[i][a],mat[i+1][b])<0)
            {
                c1[c]=malloc(strlen(mat[i][a])*sizeof(char));
                strcpy(c1[c],mat[i][a]);
                c++; a++;
            }
            else if(strcmp(mat[i][a],mat[i+1][b])>0)
            {
                c1[c]=malloc(strlen(mat[i+1][b])*sizeof(char));
                strcpy(c1[c],mat[i+1][b]);
                c++; b++;
            }
        }

        while(a<co)
        {
            c1[c]=malloc(strlen(mat[i][a])*sizeof(char));
                strcpy(c1[c],mat[i][a]);
                c++; a++;
        }

        while(b<co)
        {
            c1[c]=malloc(strlen(mat[i+1][b])*sizeof(char));
                strcpy(c1[c],mat[i+1][b]);
                c++; b++;
        }
    }

    for(i=0;i<(r*c);i++)
    {
        printf("Mat ordered : %s \n",c1[i]);
    }

} 

【问题讨论】:

  • 请将矩阵的定义添加到您的问题中。注意:你 malloc 1 字节太少了。注意2你为什么要malloc,你可以参考原始字符串,而不是......

标签: c string sorting matrix


【解决方案1】:

用 arr1[] 和 arr2[] 这两个数组输入试试这个,arr3[] 结果和 m, n 两个数组的长度

int merge_arrays(char arr1[], char arr2[], char arr3[], int m, int n)
{
   int i,j;
   for(i = 0; i < m; i++)
   {
     arr3[i] = arr1[i];
   }
   for(i = m, j = 0 ; i < m + n; i++, j++)
   {
     arr3[i] = arr2[j];
   }
}

【讨论】:

  • 我认为解决方案是使用 char[][] 数组作为 for 循环的输入来迭代函数
猜你喜欢
  • 2018-11-20
  • 1970-01-01
  • 1970-01-01
  • 2017-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-04
  • 2015-07-23
相关资源
最近更新 更多