查找顺序我将元素添加到2d数组

时间:2018-04-23 19:54:28

标签: c multidimensional-array

所以我从一个充满零的矩阵开始,我定义了一个名为Point的结构,一个点具有我想要添加的值以及添加该值的索引。例如,如果我添加的第一个元素是3.4,其索引是1,则下一个将是2,依此类推。

typedef struct 
{
int index;
double value;

}Point;



void adds(int line, int column, double value, Point matrix [100] [100] ){
static int c = 1;
matrix[line][column].value = value;
matrix[line][column].index = c;
c++;
}

我有结构和方法,为我想要的行和列添加一个值,我已经测试过,值的索引是正确的,因为我添加它们。我有一个方法,假设按其索引的新月顺序打印值

void list(Point matrix [100][100]){

int i, j, c;

if(zeros(matrix) == 0)
    printf(" empty matrix\n");

for(i = 0; i < 100; i++){
    for(j = 0; j < 100; j++){
        for(c = 1; c <= nelem(matrix); c++){
           if( matrix[i][j].index == c)
              printf("[%d;%d] = %0.3lf\n", i, j, matrix[i][j].value);
         }

    }
}

}

我不知道为什么,但这会按行和列的顺序打印值,而不是按索引顺序打印,我不知道什么是错的,有人能帮我找出来吗?

1 个答案:

答案 0 :(得分:0)

不会是sort

void qsort (void* base, size_t num, size_t size, 
            int (*comparator)(const void*,const void*));

使用适当的比较器功能工作:

qsort(matrix, 100*100, sizeof(matrix[0][0]), cmp);

cmp将是:

int cmp(const void *a,const void *b)
{
  struct Point *a1 = (struct Point *)a;
  struct Point *a2 = (struct Point*)b;
  if((*a1).index>(*a2).index)return -1;
  else if((*a1).index<(*a2).index)return 1;
  else return 0;
}

比较器功能

int comparator(const void* p1, const void* p2);

返回值含义:

  • &lt; 0 p1指向的元素位于p2
  • 指向的元素之前
  • 0 p1指向的元素等效于指向的元素 P2
  • &gt; 0 p1指向的元素位于p2
  • 指向的元素之后