对不起,如果我问了太多问题,希望我能在这个网站上提供帮助。我试图创建一个选择排序,但在排序方面没有运气。
import java.util.Random;
public class Tester {
public static void main(String[] args) {
selectionSort(args);
}
private static void printArray(int[] anArray) {
for (int i = 0; i < anArray.length; i++) {
if (i > 0) {
System.out.print(", ");
}
System.out.print(anArray[i]);
}
}
public static void selectionSort(String[] args) {
int i,n = 0,x = 0;
int l = 10;
int temp;
Random r = new Random();
int array[] = new int[l];
for(i = 0;i < l; i++){
array[i] = r.nextInt(271);
}
printArray(array);
while(n < l){
for(int j=0; j<l; j++){
if(array[j] < array[x])
x = j;
}
temp = array[x];
array[x] = array[n];
array[n] = temp;
n++;
x = n;
}
printArray(array);
}
}
我认为我的大多数问题都来自
for(int j=0; j<l; j++){
if(array[j] < array[x])
x = j;
}
temp = array[x];
array[x] = array[n];
array[n] = temp;
n++;
x = n;
}
我无法理解这个问题。我可以得到最小的数字排序,但它是奇怪的顺序。我认为x经常变化,我需要保持它的顺序,所以我把它等于n。在那之后不工作我不知所措。我很感激帮助。
答案 0 :(得分:5)
您错误地执行了循环部分,因此请执行以下操作:
for(int j=0; j<l; j++){
if(array[j] < array[x])
x = j;
}
而不是:
for(int j=x+1; j<l; j++)
if(array[j] < array[x])
x = j;
请注意,选择排序的每个循环都应该从最后一个元素开始。