仅根据第一列对C中的二维数组进行排序



我有一个双类型数组,有2列,最大行数为1000,我想根据每行的第一个元素对其进行排序,然后移动整行。本质上,我希望第二列元素没有影响。

我将阵列介绍为:

双A[1000][2];

总的来说。A的一个例子可能是:

18.0 2.0

5.5 3.5

10.0 8.1

4.0 2.5

排序后,我希望它看起来像这样:

4.0 2.5

5.5 3.5

10.0 8.1

18.0 2.0

如果知道如何反向排序也很好,这样它看起来像这样:

18.0 2.0

10.0 8.1

5.5 3.5

4.0 2.5

请注意,如何仅根据第一列中的值对其进行排序,然后切换整行。

我尝试使用一种非常标准的插入排序算法,只需将输入参数更改为二维数组,并在函数内部有一块代码来更改行的两个元素,但我一直收到这个错误:

错误:数组具有不完整的元素类型"double[]"sort_double_array(双A[][],int n){

我该怎么做?如果能够使用插入排序,那就太好了。我可以发布我用于插入排序的函数,但它非常适合一维数组。

提前谢谢你,真的被困在这里了。

干杯,

詹姆斯。

尝试将函数声明为sort_double_array(double A[][2], int n);

多维数组必须具有除第一个维度之外的所有维度的边界。

尝试将排序函数原型化为void sort_double_array(double *A[], int n)。对于额外的奖励积分,请使用size_t而不是int

对于这个特定的情况,听起来每一行都有重要的意义,它似乎是某种对象?然后我建议忘记2D数组,将其声明为structs数组。该结构看起来像:

#define N 2
typedef struct
{
  double data [N];
} my_data_t;

然后声明该结构的数组:

my_data_t arr [1000];

现在,您的问题缩小到"如何对x数组进行排序"。网上有很多关于这方面的信息。如果你不想自己实现排序算法(这只是为了教育目的),我建议你在stdlib.h中使用qsort()函数。对于这个qsort,有效的是:qsort(arr,sizeof(arr)/sizeof(*arr),sizeof;

对于qsort,您将实现排序所使用的比较函数

int less (const void* a, const void* b)
{
  const my_data_t* ptr_a = a;
  const my_data_t* ptr_b = b;
   return (int)(ptr_a->data[0] - ptr_b->data[0]);
}

要更改排序顺序,请实现类似的函数"more"。

#include<stdio.h>
#include<stdlib.h>
int main()
{
        int arr[4][2] = {18,2,5,3,10,8,4,2};
        int row=4,col=2;
        int i,j,k=0,x,temp;
        for(i=0;i<row;i++)
        {
                for(j=i+1;j<row;j++)
                {
                        if(arr[i][k] > arr[j][k])
                        {
                            for(x=0;x<2;x++) {
                                temp=arr[i][x];
                                arr[i][x]=arr[j][x];
                                arr[j][x]=temp;
                                }
                        }
                }
        }
        for(i=0;i<row;i++)
        {
                for(j=0;j<col;j++)
                printf("%d ", arr[i][j]);
                printf("n");
        }
}

相关内容

  • 没有找到相关文章

最新更新