Что я делаю не так при сортировке массива?Python

Программы на Python
Anonymous
Что я делаю не так при сортировке массива?

Сообщение Anonymous »

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

Код: Выделить всё

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

Но оказывается, что на самом деле он не сортирует массив. Я использовал pythontutor.com, чтобы увидеть, в чем проблема, и кажется, что она начинается в i = 3 этой строки:

Код: Выделить всё

for i in range (medio):
Я пытался сделать elemMax = 7, но получилось elemMax равным 4
Визуальное объяснение Pythontutor .com
Похоже, потому что posiMax равен 3, поэтому он перемещает elemMax на одну позицию вперед. Я пытался добавить +1 к posiMax после всего процесса, но при этом 9 оказывается на 3-й позиции:
Визуальное объяснение проблема со значением 9
Я много чего пробовал, но не понимаю, что меняет список, поэтому elemMax на одну позицию вперед?? понятия не имею

Подробнее здесь: https://stackoverflow.com/questions/783 ... ay-sorting

Вернуться в «Python»