Papi Ritz
Papi Ritz

Reputation: 1

Descending selection sort with output during execution

Write a void method selectionSortDescendTrace() that takes an integer array, and sorts the array into descending order. The method should use nested loops and output the array after each iteration of the outer loop, thus outputting the array N-1 times (where N is the size). Complete main() to read in a list of up to 10 positive integers (ending in -1) and then call the selectionSortDescendTrace() method.

If the input is:

20 10 30 40 -1

then the output is:

40 10 30 20
40 30 10 20
40 30 20 10

My code:

import java.util.Scanner;

public class MyProgram {

public static void selectionSortDescendTrace( int [] numbers, int numElements)
{
    for (int i = 0; i < numbers.length - 1; i++) {
        if(numbers[i] > 0) {
        int maxElementIndex = i;
        for (int j = i + 1; j < numbers.length; j++) {
            if (numbers[maxElementIndex] < numbers[j]) {
                maxElementIndex = j;
            }
        }
            int temp = numbers[i];
            numbers[i] = numbers[maxElementIndex];
            numbers[maxElementIndex] = temp;
            
            for (int element: numbers) {
                 if(element > 0)
                    System.out.print(element + " ");
                }
                 System.out.println("");
            }
     }
}
   
public static void main(String[] args){  
    Scanner scnr = new Scanner(System.in);
    
    int input, i = 0;
    int numElements = 0;
    int [] numbers = new int[10];
    
    do{
        input = scnr.nextInt();
        if(input != -1){
           numbers[i] = input;
           i++;
           numElements++;
        }
        
        }while(input != -1);
           selectionSortDescendTrace(numbers, numElements);
    
}  

}

My output is:

40 10 30 20
40 30 10 20
40 30 20 10
40 30 20 10

Im not sure why its repeating the last line twice... Please help.

Upvotes: 0

Views: 8053

Answers (1)

Tobias
Tobias

Reputation: 2575

The problem is in the for loop of your selectionSortDescendTrace method. Becaues the loop runs numbers.length - 1 times (for (int i = 0; i < numbers.length - 1; i++)). numbers.length is 10, because you define the length of the array as 10 in your main method.

If you change the condition in the first for loop of the selectionSortDescendTrace method like this it should work:

public static void selectionSortDescendTrace(int[] numbers, int numElements) {
    for (int i = 0; i < numElements - 1; i++)
        if (numbers[i] > 0) {
            //...

This question might be helpfull to understand how to find bugs like this.

Upvotes: 1

Related Questions