【问题标题】:Sorting per row of 2-dimensional array对二维数组的每行进行排序
【发布时间】:2012-02-24 12:53:10
【问题描述】:

我有一个二维 (3x7) 数组。我想按行排序。我写了一个示例代码。

 #define numRows 3
    #define numCols 7
int arr[numRows-1][numCols-1] = {{0,1,2,3,4,5,6}, {7,8,9,10,11,12,13},{14,15,16,17,18,19,20}};

    sort_row(arr);

    void sort_row(int *p)
    {
     for (int i = 0 ;i<numRows-1;i++)
     {
       sort(p[i][]);
     }
    }

    void sort(int *p)
    {
        for ( int c = 1 ; c <= numCols - 1 ; c++ )
        {
            for ( d = 0 ; d <= c - 1 ; d++ )
            {
                if ( array[c] < array[d] )
                {
                    swap = array[d];
                    array[d] = array[c];

                for ( int k = c ; k > d ; k-- )
                    array[k] = array[k-1];      

                array[k+1] = swap;
                }
            }
        }
    }

我正在为每一行进行插入排序。

Qn:我是否将每一行正确地传递给排序?我该如何改进它?

寻找改进建议以改进或指出我在代码中的错误

【问题讨论】:

  • 注意dnswap是未声明的变量。
  • 你测试过这段代码吗? sort()n 的初始值是多少? numRowsnumCols 的值是什么?为什么arr 的维度为numRows - 1numCols - 1
  • 我现在更正了这个问题....

标签: c


【解决方案1】:

除非您真的想自己实现排序,否则只需使用qsort()

【讨论】:

  • 我需要为那个函数调用任何头文件吗?如果需要怎么办?
【解决方案2】:

没有; p 已被声明为指向 sort_row 中的 int 的指针,因此 p[i] 将是一个 int,您不应该将 [] 应用于它,除此之外,sort 需要一个指向 int 的指针。

此外,您在任何函数之外都有一个可执行语句(对 sort_row 的调用)。

【讨论】:

    【解决方案3】:

    在@unwind ans 上搜索后,得出了这个答案:

    #include <stdlib.h>
    #define numRows 3
    #define numCols 7
    int arr[numRows-1][numCols-1] = {{0,1,2,3,4,5,6}, {7,8,9,10,11,12,13},{14,15,16,17,18,19,20}};
    int compare (const void * a, const void * b)
    {
      return ( *(int*)a - *(int*)b );
    }
    void sort_row(int *p)
    {
     for (int i = 0 ;i<numRows-1;i++)
     {
       qsort (p[i], 7, sizeof(int), compare);//sort(p[i]);
     }
    }
    

    【讨论】:

      猜你喜欢
      • 2013-08-17
      • 2015-09-17
      • 1970-01-01
      • 2023-04-03
      • 2021-12-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多