Search code examples
javascriptarraysalgorithmselection-sort

do, all of your assertions pass? This is the Error


Swaps the values at the position and at the minimum index. Write selection sort, making use of the swap and indexOfMinimum functions. This is the question, I dont know whats wrong in my logic and why my code does not run the assertion statement correctly.

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]);

Solution

  • There was a bug in your code, try running

        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, j);
        		swap(array , j , smallest); 
        	}
        };
        
        var array = [22, 11, 99, 88, 9, 7, 42];
        selectionSort(array);
        console.log("Array after sorting:  " + array);
    in selectionSort()

    smallest = indexOfMinimum(array, 0);
    

    should have been

    smallest = indexOfMinimum(array, j);