Сортировка номеров строк матрицы по убыванию сумм строк

Задача

 

Упорядочить номера строк матрицы по убыванию сумм элементов срок. Вывести на экран отсортированные номера строк и соответствующие им суммы.

 

Решение

В данном случае элементы самой матрицы сортировать не надо. Требуется сортировка номеров строк. Следовательно, они должны быть сохранены в какой-либо структуре и связаны с суммами строк. Можно создать два одноразмерных массива, в одном хранить номера строк, в другом - соответствующие им суммы. При сортировке второго массива перестановки также выполнять в первом.

Однако проще использовать массив записей, где каждая запись имеет два поля: номер строки и ее сумму. В таком случае сортировка элементов массива выполняется по полю суммы. В отличие от варианта с использованием двух массивов, здесь переставлять вслед за сортировкой сумм соответствующие им номера строк не требуется, так как сортируются записи, в которых номера и суммы объединены в одну структуру.

Программа на языке Паскаль: 

 

const N = 7; M = 5;
type
    row = record 
       sum: word;
       id: byte;
    end;
var
    arr: array[1..N,1..M] of word;
    rows: array[1..N] of row;
    i,j: byte;
    b: row;
begin
    randomize;
    for i:=1 to N do begin
        rows[i].sum := 0;
        rows[i].id := i;
        write(i,' -');
        for j:=1 to M do begin
            arr[i,j] := random(9) + 1;
            write(arr[i,j]:2);
            rows[i].sum := rows[i].sum + arr[i,j];
        end;
        writeln;
    end;
 
    for i:=1 to N-1 do
        for j:=1 to N-i do
            if rows[j].sum < rows[j+1].sum then begin
                b := rows[j];
                rows[j] := rows[j+1];
                rows[j+1] := b;
            end;
 
    writeln('Строки по убыванию сумм: ');
    for i:=1 to N do
        writeln(rows[i].id,' - ',rows[i].sum);
end.

 

Пример выполнения программы:

1 - 4 1 6 2 3
2 - 7 5 9 4 2
3 - 7 9 3 8 6
4 - 2 2 2 6 9
5 - 1 7 9 4 1
6 - 1 2 4 1 9
7 - 3 5 1 4 2
Строки по убыванию сумм: 
3 - 33
2 - 27
5 - 22
4 - 21
6 - 17
1 - 16
7 - 15

 

Тема

Записи

Уровень

Сложные задачи