2017-08-12 56 views
0

交换位置和最小索引值。编写选择排序,利用swap和indexOfMinimum函数。这是一个问题,我的逻辑错误t know what,为什么我的代码不能正确运行断言声明。是吗,你所有的断言都通过了?这是错误

var swap = function(array, firstIndex, secondIndex) { 
    var temp = array[firstIndex]; 
    array[firstIndex] = array[secondIndex]; 
    array[secondIndex] = temp; 
}; 

var indexOfMinimum = function(array, startIndex) { 

    var minValue = array[startIndex]; 
    var minIndex = startIndex; 

    for(var i = minIndex + 1; i < array.length; i++) { 
     if(array[i] < minValue) { 
      minIndex = i; 
      minValue = array[i]; 
     } 
    } 
    return minIndex; 
}; 

var selectionSort = function(array) { 
    var j; 
    var smallest; 
    for(j = 0; j < array.length; j++) 
    { 
     smallest = indexOfMinimum(array, 0); 
     swap(array , j , smallest); 
    } 
}; 

var array = [22, 11, 99, 88, 9, 7, 42]; 
selectionSort(array); 
println("Array after sorting: " + array); 

Program.assertEqual(array, [7, 9, 11, 22, 42, 88, 99]); 
+0

一个数组fter sorting:11,99,88,9,22,42,7 这就是我得到的答案 –

+0

预期的结果是什么? – guest271314

+0

7,9,11,22,42,88,99这应该是结果 –

回答

1

有你的代码中的错误,尝试运行

var swap = function(array, firstIndex, secondIndex) { 
 
    \t var temp = array[firstIndex]; 
 
    \t array[firstIndex] = array[secondIndex]; 
 
    \t array[secondIndex] = temp; 
 
    }; 
 
    
 
    var indexOfMinimum = function(array, startIndex) { 
 
    
 
    \t var minValue = array[startIndex]; 
 
    \t var minIndex = startIndex; 
 
    
 
    \t for(var i = minIndex + 1; i < array.length; i++) { 
 
     \t if(array[i] < minValue) { 
 
      \t minIndex = i; 
 
      \t minValue = array[i]; 
 
     \t } 
 
    \t } 
 
    \t return minIndex; 
 
    }; 
 
    
 
    var selectionSort = function(array) { 
 
    \t var j; 
 
    \t var smallest; 
 
    \t for(j = 0; j < array.length; j++) 
 
    \t { 
 
    \t \t smallest = indexOfMinimum(array, j); 
 
    \t \t swap(array , j , smallest); 
 
    \t } 
 
    }; 
 
    
 
    var array = [22, 11, 99, 88, 9, 7, 42]; 
 
    selectionSort(array); 
 
    console.log("Array after sorting: " + array);
在选择排序()

smallest = indexOfMinimum(array, 0); 

应该已经

smallest = indexOfMinimum(array, j);