按linkedList排序

问题描述 投票:0回答:1

当我在奇数或偶数之间进行实现更改时,我可以获得预期的结果,但是,当我添加条件时,每次更改后结果仍然是无序的,检查偶数或奇数的输出示例

  n = len(lista)

  for i in range(1, n, 2):
    min_index = i
    for j in range(i + 1, n, 2):
      if lista[j] < lista[min_index]:
        if j > min_index:
          min_index = j

    lista[i], lista[min_index] = lista[min_index], lista[i]
    print(lista)

  for i in range(2, n, 2):
    max_index = i
    for j in range(i + 1, n, 2):
      if lista[j] > lista[max_index]:
        if j > max_index:
          max_index = j

    lista[i], lista[max_index] = lista[max_index], lista[i]
    print(lista)

  return lista
python list selection-sort
1个回答
1
投票

主要错误是

i
不是必须发生交换的地方:

奇数迭代中的索引与偶数迭代中的索引应该完全不同。在奇数迭代中,索引应为 0(对于第一次迭代)、1(对于第三次迭代)、2(对于第五次迭代)...对于偶数迭代,索引应该为 n 𝑛−1 (对于第二次迭代)、𝑛−1 2(第四次迭代),...等等,所以这通常是不是

i

的值

您还应该调整范围以搜索最小值/最大值。当迭代发生时,数组的右侧也会得到一个已排序的段,因此搜索不应该一直走到数组的末尾。

如果维护尚未排序的段的最左和最右索引,会更容易。随着迭代的进行,这个窗口会变得越来越小。

这是更正后的代码:

def ordenacao_por_selecao_modificada(arr):
    n = len(arr)
    left = 0
    right = n - 1
    for i in range(1,n):
        if i % 2 == 1:
            indice_maior = right
            for j in range(left, right + 1):
                if arr[j] > arr[indice_maior]:
                    indice_maior = j
            print(lista)
            arr[right], arr[indice_maior] = arr[indice_maior], arr[right]
            right -= 1
        else:
            indice_menor = left
            for j in range(left, right + 1):
                if arr[j] < arr[indice_menor]:
                    indice_menor = j
            print(lista)
            arr[left], arr[indice_menor] = arr[indice_menor], arr[left]
            left += 1
© www.soinside.com 2019 - 2024. All rights reserved.