gpt4 book ai didi

c - 二维数组,按总和对行进行排序

转载 作者:行者123 更新时间:2023-11-30 19:42:48 28 4
gpt4 key购买 nike

有一个二维数组,其中包含来自用户的指针,填充有随机数,每行的程序计数总和。我需要按每行的总和对数组进行排序并打印它。例如,如果我们有数组:1 2 2 (sum=5)2 9 9 (sum=20)2 1 6 (sum=9)输出应为:1 2 2 (sum=5)2 1 6 (sum=9)2 9 9 (sum=20)。感谢帮助。

int main () {
int i, j, row, column, **array,sum;
time_t seconds;
time (&seconds);
srand ((unsigned int)seconds );

printf ("Write number of rows:");
scanf ("%d", &row);
printf ("Write number of columns:");
scanf ("%d", &column);

array=(int**) malloc (row * sizeof(int *));
if (array!=NULL){
for (i=0; i<row;i++)
array[i]= (int*) malloc (column *sizeof(int));
}

for (i=0; i<row;i++)
for (j=0; j<column;j++)
array[i][j]=(rand()%100);

for (i=0; i<row;i++){
for (j=0; j<column;j++)
printf("%d ",array[i][j] );

printf ("\n");
}

for(i=0;i<row;i++){ //find sum of each row
sum=0;
for(j=0;j<column;j++){
sum=sum+array[i][j];
}
printf("%d \n",sum);
}

return 0;
}

最佳答案

选项 1 的示例

#include <stdio.h>
#include <stdlib.h>

int COLUMNS;

int sum(int len, int *array){
int i, sum = 0;
for(i=0; i<len; ++i)
sum += *array++;
return sum;
}

int cmp(const void *a, const void *b){
int sum1 = sum(COLUMNS, *(int**)a);
int sum2 = sum(COLUMNS, *(int**)b);
return (sum1 > sum2) - (sum1 < sum2);
}

int main(void){
int i, j, row, column, **array;

row = 3; column = 3;

array = (int**) malloc (row * sizeof(*array));//cast of (int**) is redundant.
array[0] = (int []){1, 2, 2};
array[1] = (int []){2, 9, 9};
array[2] = (int []){2, 1, 6};

COLUMNS = column;//size of columns pass to compare function by global variable.
qsort(array, row, sizeof(*array), cmp);

for (i=0; i<row;i++){
for (j=0; j<column;j++)
printf("%d ",array[i][j] );
printf ("\n");
}
free(array);

return 0;
}
<小时/>

选项 2 的示例

#include <stdio.h>
#include <stdlib.h>

int sum(int len, int *array){
int i, sum = 0;
for(i=0; i<len; ++i)
sum += *array++;
return sum;
}

typedef struct pair {
int *p;//or index
int sum;
} Pair;

int cmp(const void *a, const void *b){
Pair const *x = a;
Pair const *y = b;
return (x->sum > y->sum) - (x->sum < y->sum);
}

int main(void){
int i, j, row, column, **array;

row = 3; column = 3;

array = (int**) malloc (row * sizeof(*array));//cast of (int**) is redundant.
array[0] = (int []){1, 2, 2};
array[1] = (int []){2, 9, 9};
array[2] = (int []){2, 1, 6};

Pair *temp = malloc(row * sizeof(*temp));
for(i = 0; i < row; ++i){
temp[i].p = array[i];
temp[i].sum = sum(column, array[i]);
}

qsort(temp, row, sizeof(*temp), cmp);

for (i=0; i<row;i++){
for (j=0; j<column;j++)
printf("%d ", temp[i].p[j] );
printf ("\n");
}
free(temp);
free(array);

return 0;
}

关于c - 二维数组,按总和对行进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30711538/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com