所以我从一个充满零的矩阵开始,我定义了一个名为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);
}
}
}
}
我不知道为什么,但这会按行和列的顺序打印值,而不是按索引顺序打印,我不知道什么是错的,有人能帮我找出来吗?
答案 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);
返回值含义: