По сути, это та часть, где предполагается искать положение минимума в списке, сохраняя его значение, удалить его текущую позицию и вставить в правильное положение, затем он ищет положение максимума и делает то же самое, уменьшая диапазон, в котором он ищет минимальное и максимальное значения для каждой итерации:
Код: Выделить всё
medio = ((0 + len(a)-1)//2)
posi = 0
posiMax = 0
posf = len(a)-1
final = len(a)
for i in range (medio):
poseMin = minimoMaximo(a[i:final])
elemMin = a[poseMin[0]+posi]
del a[poseMin[0]+posi]
a.insert(posi, elemMin)
posiMax = posiMax + 1
elemMax = a[poseMin[1]+posiMax]
del a[poseMin[1]+posiMax]
a.insert(posf, elemMax)
posi = posi + 1
posf = posf - 1
final = final - 1
Код: Выделить всё
for i in range (medio):Визуальное объяснение Pythontutor .com
Похоже, потому что posiMax равен 3, поэтому он перемещает elemMax на одну позицию вперед. Я пытался добавить +1 к posiMax после всего процесса, но при этом 9 оказывается на 3-й позиции:
Визуальное объяснение проблема со значением 9
Я много чего пробовал, но не понимаю, что меняет список, поэтому elemMax на одну позицию вперед?? понятия не имею
Подробнее здесь: https://stackoverflow.com/questions/783 ... ay-sorting