我有一个包含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(double A [] [],int n){
我该怎么做?能够使用插入排序来做它会很好。我可以发布我用于插入排序的函数,但它适用于一维数组。
提前非常感谢,真的被困在这里。
干杯,
詹姆斯。
答案 0 :(得分:3)
尝试将该函数声明为
sort_double_array(double A[][2], int n);
多维数组必须具有除第一个之外的所有维度的边界。
答案 1 :(得分:1)
尝试将排序功能原型设为void sort_double_array(double *A[], int n)
。如需额外奖励积分,请使用size_t
而不是int
。
答案 2 :(得分:1)
对于这个特定情况,听起来每行都有重要意义,它似乎是某种对象?然后我建议忘记2D数组并将其声明为结构数组。该结构看起来像:
#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(* arr),less);
对于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"。
答案 3 :(得分:0)
#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");
}
}