What is the difference between the two selection sort algorithms?

  • Thread starter Thread starter magnifik
  • Start date Start date
  • Tags Tags
    Array
Click For Summary
SUMMARY

The discussion focuses on the differences between two implementations of the selection sort algorithm in Java. The first implementation, which uses a nested loop with the inner loop starting from index 1, fails to sort the array correctly because it compares already sorted elements, leading to incorrect swaps. The second implementation corrects this by starting the inner loop from index i + 1, effectively ignoring previously sorted elements and ensuring that only unsorted elements are compared and swapped. This modification allows the algorithm to function correctly and sort the array as intended.

PREREQUISITES
  • Understanding of Java programming language
  • Familiarity with sorting algorithms, specifically selection sort
  • Knowledge of array data structures
  • Basic concepts of algorithm complexity
NEXT STEPS
  • Study the time complexity of selection sort and compare it with other sorting algorithms like quicksort and mergesort.
  • Implement the selection sort algorithm in different programming languages, such as Python or C++.
  • Explore optimization techniques for sorting algorithms, including adaptive sorting methods.
  • Learn about the stability of sorting algorithms and how it applies to selection sort.
USEFUL FOR

Software developers, computer science students, and anyone interested in understanding sorting algorithms and their implementations in Java.

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?
 

Similar threads

  • · Replies 7 ·
Replies
7
Views
3K
  • · Replies 18 ·
Replies
18
Views
3K
  • · Replies 2 ·
Replies
2
Views
2K
  • · Replies 5 ·
Replies
5
Views
3K
  • · Replies 4 ·
Replies
4
Views
2K
  • · Replies 3 ·
Replies
3
Views
1K
  • · Replies 3 ·
Replies
3
Views
2K
  • · Replies 4 ·
Replies
4
Views
2K
  • · Replies 5 ·
Replies
5
Views
2K
  • · Replies 21 ·
Replies
21
Views
4K