What is the difference between the two selection sort algorithms?

  • Thread starter Thread starter magnifik
  • Start date Start date
  • Tags Tags
    Array
Join the discussion
Ask a follow-up here, or get your own question answered by working scientists, mathematicians and engineers — people, not an autocomplete.
Real named experts · corrections over time · the nuance an AI answer skips
2 replies · 2K views
magnifik
Messages
350
Reaction score
0
I'm trying to understand a sorting algorithm (selection sort, to be exact). I started out with this:

public static void selectionSort1(int[] x) {
for (int i=0; i<x.length-1; i++) {
for (int j=1; j<x.length; j++) {
if (x > x[j]) {
//... Exchange elements
int temp = x;
x = x[j];
x[j] = temp;
}
}
}
}

but that didn't work so i made one slight modification by changing j to i + 1

public static void selectionSort1(int[] x) {
for (int i=0; i<x.length-1; i++) {
for (int j=i+1; j<x.length; j++) {
if (x > x[j]) {
//... Exchange elements
int temp = x;
x = x[j];
x[j] = temp;
}
}
}
}

i'm having trouble figuring out what's the difference between the codes?
 
Physics news on Phys.org
The first one will not work because you check:
first iteration:
x[0] > x[1]
x[0] > x[2]
x[0] > x[3]
and so on. This will work for first iteration.
some iterations later:
x[3] > x[1]
x[3] > x[2]
x[3] > x[3]
and so on. This will not work because now you will switch places with numbers already sorted.
For example x[3] will for sure be larger than x[1] because x[1] is sorted to be the second smallest number. And when they switch a larger number is placed in x[1].

Second code works because
first iteration:
x[0] > x[1]
x[0] > x[2]
x[0] > x[3]
and so on
some iterations later:
x[3] > x[4]
x[3] > x[5]
x[3] > x[6]
this will work because you discard the already checked values which is not the case in the first code
 
Last edited:
When you include code in your post, please put (code) and (/code) tags around it (with the tags in brackets [] though). Doing this preserves your formatting and makes your code easier to read.

I have edited your post to do this.
magnifik said:
I'm trying to understand a sorting algorithm (selection sort, to be exact). I started out with this:
Code:
public static void selectionSort1(int[] x) {
    for (int i=0; i<x.length-1; i++) {
        for (int j=1; j<x.length; j++) {
            if (x[i] > x[j]) {
                //... Exchange elements
                int temp = x[i];
                x[i] = x[j];
                x[j] = temp;
            }
        }
    }
}
but that didn't work so i made one slight modification by changing j to i + 1
Code:
public static void selectionSort1(int[] x) {
    for (int i=0; i<x.length-1; i++) {
        for (int j=i+1; j<x.length; j++) {
            if (x[i] > x[j]) {
                //... Exchange elements
                int temp = x[i];
                x[i] = x[j];
                x[j] = temp;
            }
        }
    }
}
i'm having trouble figuring out what's the difference between the codes?