【问题标题】:insertion sort in python vs javascriptpython vs javascript中的插入排序
【发布时间】:2020-02-02 18:58:53
【问题描述】:

我使用 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) 

【问题讨论】:

  • 显然他们没有做同样的事情(因为据报道有一个坏了)。做了哪些调试?例如。什么状态是出乎意料的?

标签: javascript python algorithm insertion-sort


【解决方案1】:

Python 和 javascript 对 someList[-1] 的作用有不同的看法。

在您上面的代码中,您评估nums[hole-1]。当hole 为零时,您编写循环的方式可以是nums[-1]。在 python 代码中,这将获取列表的最后一个元素。在 javascript 代码中,这是未定义的。这对下一部分:nums[hole-1] &gt; value 的含义有重大影响。

hole 的值为0 时,你最终不需要计算while hole &gt;= 0 and nums[hole-1] &gt; value,因此将&gt;= 更改为&gt; 可能是一个不错的选择。

【讨论】:

  • 啊,很有意义。所以当孔为0时,不需要执行循环。 javascript 中 python 与 undefined 的 -1 索引说明了为什么输出不同。非常感谢@markmeyer!
【解决方案2】:
  nums[hole] = nums[hole-1]

如果hole == 0nums[hole-1] 变为nums[-1],则获取列表的最后一个元素。这不是它在 Javascript 中所做的。

【讨论】:

    猜你喜欢
    • 2012-10-06
    • 1970-01-01
    • 1970-01-01
    • 2021-09-29
    • 2021-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多