сортировка вставок в python против javascript - PullRequest
0 голосов
/ 02 февраля 2020

Я реализовал сортировку вставкой, используя python и javascript. По какой-то странной причине код JS работает, а код python - нет. Обе реализации должны делать одно и то же. Я проследил каждую строку кода и не смог найти разницу между ними. Посмотрите и посмотрите, сможете ли вы найти то, что отличается, с помощью кода python.

Javascript Код:

function insertionSort(nums) {

  for (let i=0; i<nums.length; i++) {
    const value = nums[i];
    let hole = i;

    while (hole >= 0 && nums[hole-1] > value) {
      nums[hole] = nums[hole-1];
      hole = hole - 1;
    }
    nums[hole] = value;
  }
  return nums;
}


const sorted = insertionSort([5,2,1,3,6,4]);
console.log(sorted);

Python Код:

def insertion_sort(nums):
  for i in range(0,len(nums)):
    value = nums[i]
    hole = i

    while hole >= 0 and nums[hole-1] > value:
      nums[hole] = nums[hole-1]
      hole = hole - 1

    nums[hole] = value
  return nums

sorts = insertion_sort([5,2,1,3,6,4])
print(sorts) 

Ответы [ 2 ]

3 голосов
/ 02 февраля 2020

Python и javascript имеют разные представления о том, что делает someList[-1].

В приведенном выше коде вы оцениваете nums[hole-1]. То, как вы написали свой l oop, может быть nums[-1], когда hole равно нулю. В коде python он получает последний элемент списка. В коде javascript это не определено. Это существенно влияет на то, что означает следующая часть: nums[hole-1] > value.

В конце вам не нужно вычислять while hole >= 0 and nums[hole-1] > value, когда значение hole равно 0, поэтому возможно изменение >= до > будет хорошим вариантом.

2 голосов
/ 02 февраля 2020
  nums[hole] = nums[hole-1]

Если hole == 0, nums[hole-1] становится nums[-1], то есть последний элемент списка. Это не то, что он делает в Javascript.

...