选择排序不用Java排序

Dat*_*s23 3 java sorting

如果我问了太多问题,我很抱歉,希望我能在这个网站上提供帮助.我正在尝试创建一个选择排序,但在排序方面没有运气.

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);
    }

}
Run Code Online (Sandbox Code Playgroud)

我想我的大部分问题都来自于此

     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;
     }
Run Code Online (Sandbox Code Playgroud)

我无法想象这个问题.我可以得到最小的数字排序,但它是奇怪的顺序.我认为x经常变化,我需要保持它的顺序,所以我把它等于n.在那之后不工作我不知所措.我很感激帮助.

小智 5

你做错了循环部分,所以这样做:

 for(int j=0; j<l; j++){
    if(array[j] < array[x])
        x = j;

 }
Run Code Online (Sandbox Code Playgroud)

而不是这个:

for(int j=x+1; j<l; j++)
    if(array[j] < array[x])
        x = j;
Run Code Online (Sandbox Code Playgroud)

请注意,选择排序的每个循环应该从完成其自身的最后一个元素的下一个元素开始.