Reputation: 58
What wrong am I doing in this sort? I'm getting the wrong output for this input only.
public class SelectionSort {
public void sort (int nums[]){
for(int i = 0; i < nums.length - 1; i ++){
int min_index = i;
for(int j = i + 1; j < nums.length; j ++){
if(nums[j] < nums[min_index]){
min_index = j;
int temp = nums[min_index];
nums[min_index] = nums[i];
nums[i] = temp;
}
}
}
}
public void printArr(int nums[]){
for(int i = 0; i < nums.length; ++i){
System.out.println(nums[i]);
}
}
public static void main(String args[]){
int nums[] = {10,22,34, 45, 50, 60, 8, 12};
SelectionSort obj = new SelectionSort();
obj.sort(nums);
obj.printArr(nums);
}
}
Wrong Output 8 12 10 22 34 45 50 60
Correct Output should be 8 10 12 22 34 45 50 60
Upvotes: -1
Views: 47
Reputation: 425238
You're swapping every time you find a new minimum:
if(nums[j] < nums[min_index]){
min_index = j;
int temp = nums[min_index];
nums[min_index] = nums[i];
nums[i] = temp;
}
Instead, swap only when you've found the lowest minimum: Move the swap after the j
loop.
Learning how to debug code is an essential skill. Java was designed to support debugging. Use an IDE (I recommend IntelliJ) and learn how to use its debugger.
Upvotes: 0