我想按行(行的平均值)和列式(元素的值)对数字矩阵进行排序。我写了一些代码,但有一些错误。我的代码出了什么问题?
#include <stdio.h>
#include <stdlib.h>
void print_array(int **matrix, int row, int col)
{
int (*p)[col] = (int (*)[col])*matrix;
for(int i = 0; i < row; ++i)
{
for(int j = 0; j < col; ++j)
{
printf("%d\t", p[i][j]);
}
printf("\n");
}
}
int compare_avg(const void * a, const void * b)
{
double avg_a = 0.0, avg_b = 0.0;
const int *pa = *(const int **)a;
const int *pb = *(const int **)b;
for(int i = 0; i < 4; ++i)
{
avg_a += pa[i]/4.0;
avg_b += pb[i]/4.0;
}
if(avg_a > avg_b) return 1;
if(avg_a < avg_b) return -1;
return 0;
}
int compare(const void* pa, const void* pb)
{
const int a = *(const int*)pa;
const int b = *(const int*)pb;
if(a < b) return -1;
if(a > b) return 1;
return 0;
}
void sort_array(int **matrix, int row, int col)
{
int (*p)[col] = (int (*)[col])*matrix;
for(int i=0; i<row; ++i)
qsort(p[i], col, sizeof(int), compare);
print_array(matrix, row, col);
printf("####################################\n");
qsort(matrix, row, sizeof(matrix[0]), compare_avg);
print_array(matrix, row, col);
}
int main(int argc, char* argv[])
{
int array[5][4] = {
{1,2,-1, -1},
{3,2,-10,0},
{4,2,1,0},
{0,1,0,0},
};
int *p = &array[0][0];
printf("%ld\n",sizeof(array)/sizeof(array[0]));
printf("%ld\n",sizeof(array[0])/sizeof(int));
print_array(&p, sizeof(array)/sizeof(array[0]), sizeof(array[0])/sizeof(int));
printf("#########################################\n");
sort_array(&p, sizeof(array)/sizeof(array[0]), sizeof(array[0])/sizeof(int));
return 0;
}
我需要的输出是{{-10,0,3,2},{0,0,0,1},{-1,-1,1,2},{0,1,2,4 }}