Сортировка строк двумерного массива по сумме элементов в си

Мне очень стыдно за данный код, тем более он даже не работает, улучшите код ниже (оптимально) или выберете другой метод сортировки, пожалуйста =)

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

int rows;
int cols;
int i;
int j;
int S;
int k;
int tmp;
int max;
int c;

int main() {
    int **array;
    printf("rows=");
    scanf("%d", &rows);
    printf("cols=");
    scanf("%d", &cols);
    array=(int**)malloc(sizeof(int*) * rows * cols);

    for (i = 0; i < rows; i++)
    {
        array[i] = (int*)malloc(sizeof(int) * cols);
        for (j = 0; j < cols; j++)
        {
            array[i][j] = rand() % 100;
            printf("%4d", array[i][j]);

        }
        printf("\n");

    }
    max = 0;
    for (i = 0; i < rows; i++) {
        S=0;
        for (j = 0; j < cols; j++) {
            S= S + array[i][j];
        }
        if (S>max){
            max=S;
        }
    }
    int key[max];
    for (i = 0; i < rows; i++) {
        S=0;
        for (j = 0; j < cols; j++) {
            S= S + array[i][j];
        }
        key[S]=i;
    }

    for (k = 0; k < max; k++) {
        if (key[k] != 0) {
            c = key[i];
            for (i = 0; i < rows; i++) {
                for (j = 0; j < cols; j++) {
                    tmp = array[i][j];
                    array[i][j] = array[c][j];4
                    array[c][j] = tmp;
                }
            }
        }
     
    }
    for (i = 0; i < rows; i++) {
        for (j = 0; j < cols; j++) {
            printf("%4d", array[i][j]);

        }
        printf("\n");

    }
    for (i = 0; i < rows; i++)
    {
        free(array[i]);
    }
    free(array);

    return 0;
} 

Ответы (0 шт):