为什么意外导致我的插入排序?

时间:2018-01-21 22:47:23

标签: javascript sorting swap

我做了这个插入排序:



function selection(arr) {
     arr.forEach((cur, index) => {
       var min = index;
       for(var j = index + 1, max = arr.length; j < max; j++) {
           var cur = arr[j];
           if(cur < arr[min]) min = j;
       }
       /* Permutations without temporary var */
       arr[index] = arr[index] + arr[min];
       arr[min] = arr[index] - arr[min];
       arr[index] = arr[index] - arr[min];
     });
     return arr;
   }


   var array = [1, 9 ,2, 20, 21, 22, 19, 18, 25, 10];
   
   console.log(selection(array));
&#13;
&#13;
&#13;

当我使用临时变量时,为了进行排列,结果是预期变量。问题来自于我不使用临时变量进行排列,而不是使用临时变量,我使用该方法在没有使用加法和减法的临时变量的情况下执行此操作。这是当我得到意外和不成功的结果时,在插入排序没有临时变量时我错了什么? ,

2 个答案:

答案 0 :(得分:0)

您需要在交换元素之前添加条件(如果需要)。

...code
if(index != min){
    arr[index] = arr[index] + arr[min];
    arr[min] = arr[index] - arr[min];
    arr[index] = arr[index] - arr[min];
}

这应该可以正常工作。

答案 1 :(得分:0)

这是XOR swap algorithm的变体。当它与自身交换内存位置时,它根本不起作用,取消该值(产生0)。当min == index - 当最小值已经处于最低位置时,就会发生这种情况。