Iterating through an array

  • Thread starter magnifik
  • Start date
  • #1
360
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?
 

Answers and Replies

  • #2
79
0
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:
  • #3
35,287
7,140
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.
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?
 

Related Threads on Iterating through an array

Replies
0
Views
3K
  • Last Post
Replies
10
Views
1K
  • Last Post
Replies
0
Views
1K
  • Last Post
Replies
4
Views
15K
Replies
1
Views
2K
Replies
6
Views
385
  • Last Post
Replies
1
Views
1K
  • Last Post
Replies
1
Views
2K
  • Last Post
Replies
6
Views
4K
  • Last Post
Replies
20
Views
4K
Top