Я работаю над второй частью задания, которая просит меня переупорядочить матрицу так, чтобы каждая строка была в монотонно возрастающем порядке и чтобы первый элемент каждой строки монотонно увеличивался. Если две строки имеют одинаковое начальное значение, строки должны быть упорядочены по второму элементу в строке. Если они оба одинаковы, это должен быть третий элемент, продолжающийся до последнего элемента.
Я написал пузырьковую сортировку, которая отлично работает для первой части (переупорядочение каждой строки). Я написал пузырьковую сортировку для второй части (убедившись, что первый элемент каждой строки монотонно увеличивается). Однако я нахожусь в бесконечном цикле, и я не понимаю, почему.
Я понимаю, что проблема в том, что моя переменная inorder в конечном итоге не получает значение true (что приведет к завершению цикла while). Однако я не понимаю, почему inorder не устанавливается в true. Моя логика заключается в следующем: как только следующий код поменял строки до точки, в которой все строки упорядочены, мы еще раз пройдем цикл while (и для inorder будет установлено значение true), что вызовет цикл while. в конец. Я озадачен, почему этого не происходит.
inorder = .false.
loopA: do while ( .not. inorder ) !While the rows are not ordered
inorder = .true.
loopB: do i = 1, rows-1 !Iterate through the first column of the array
if (arr(i,1)>arr(i+1,1)) then !If we find a row that is out of order
inorder = .false.
tempArr = arr(i+1,:) !Swap the corresponding rows
arr(i+1,:) = arr(i,:)
arr(i,:) = tempArr
end if
if (arr(i,1)==arr(i+1,1)) then !The first elements of the rows are the same
loopC: do j=2, cols !Iterate through the rest of the row to find the first element that is not the same
if (arr(i,j)>arr(i+1,j)) then !Found elements that are not the same and that are out of order
inorder = .false.
tempArr = arr(i+1,:) !Swap the corresponding rows
arr(i+1,:) = arr(i,:)
arr(i,:) = tempArr
end if
end do loopC
end if
end do loopB
end do loopA
Пример ввода:
6 3 9 23 80
7 54 78 87 87
83 5 67 8 23
102 1 67 54 34
78 3 45 67 28
14 33 24 34 9
Пример (правильный) вывод (что мой код не генерирует):
1 34 54 67 102
3 6 9 23 80
3 28 45 67 78
5 8 23 67 83
7 54 78 87 87
9 14 24 33 34
Также возможно, что, глядя на это часами, я упустил что-то глупое, поэтому я ценю любые указания.