В вашем коде есть логическая ошибка.Каждый раз, когда вы проверяете, имеет ли значение nums [k] == 3, вы запускаете внутренний цикл, который заменяет элемент сразу после 3 на first 4, который он находит в массиве.Если я проиллюстрирую это (хотя и очень плохо):
Мы просто продолжим цикл, если nums [k]! = 3, поскольку он ничего не делает.
Ваш пример массива = {1, 3,2,5,3,4,4}
когда k == 1, тогда nums [k] == 3 соответствует истине.
Таким образом, он запускает внутренний цикл, и массив меняется на это:
Меняет местами 2 с индексом 2 и 4 с индексом 5, поскольку первый элемент 4 находится с индексом 5
Массив после первого выполнения внутреннего цикла: {1,3,4,5, 3,2,4}
Тогда он ничего не делает, пока не доберется до k == 4
, когда доберется до k == 4, затем nums [k] == 3правда
Таким образом, он запускает внутренний цикл, и массив меняется на это:
Результирующий массив после второго выполнения внутреннего цикла: {1,3,2,5,3,4,4}
Как видите, он поменял первые 4 (в индексе 2) с 2 в индексе 5. Но первые 4 уже были правильно размещены (при первом выполнении внутреннего цикла) и не должны двигаться.Таким образом, вам нужно отслеживать последний элемент, который вы поместили правильно, и установить начало вашего внутреннего цикла после этого последнего элемента.Дайте мне знать, если это имеет смысл.
В данный момент ваша программа делает следующее: найдите первый элемент, равный 4, и поместите его после последнего элемента, равного 3 (и некоторые элементы в середине поменялись местами).