JAVA/Selection 排序:控制台显示的结果与我输入的结果不同

JAVA/Selection sort : the console shows different results from what I've entered

我正在学习如何实施 selection sort

我对代码的期望是升序输出,例如:{1,3,4,5,6,7,9}

但是控制台显示:9, 4, 1, 6, 5, 3, 7, 9, 7, 1, 4, 5, 3, 6, 9, 7, 6, 1, 4, 3, 5, 9, 7, 6, 5, 1, 3, 4, 9, 7, 6, 5, 4, 1, 3, 9, 7, 6, 5, 4, 3, 1

我应该更改什么以获得正确的结果?

这是我的代码:

public static void main(String[] args) {
        int[]arr = {4,6,1,9,5,3,7};
        
        for(int i = 0; i<arr.length-1; i++) {
            for(int j = i+1; j<arr.length; j++) {
                if(arr[i]<arr[j]) {
                    int a=arr[i];
                    arr[i]=arr[j];
                    arr[j]=a;
                   
                
                }
            }
        for (int b = 0; b <arr.length; b++) {
            System.out.print(arr[b] + ", ");
        }
}

您在排序的同时正在打印数组。相反,在完成排序后打印数组 -

public static void main(String[] args) {
    int[] arr = {4, 6, 1, 9, 5, 3, 7};

    for (int i = 0; i < arr.length - 1; i++) { // first loop
        for (int j = i + 1; j < arr.length; j++) { // nested loop
            if (arr[i] < arr[j]) { // if condition
                int a = arr[i];
                arr[i] = arr[j];
                arr[j] = a;
            } // if condition ends
        } // nested loop ends
    } // first loop ends

     // Now the array is sorted, it's good to print.

    for (int b = 0; b < arr.length; b++) {
        System.out.print(arr[b] + ", ");
    }
}

还有一个收获。尽管您的排序可行,但您的实现并不是真正的 selection sort。这是 bubble sort 实施。关键区别在于,在 selection sort 中,您需要找到最小值并将其放在每个 iith 位置。所以你每次迭代只交换一次。在冒泡排序中,我们像你一样反复交换。

此外,正如评论中指出的那样,对于升序,您必须翻转到交换条件。所以正确的实现应该是 -

public static void main(String[] args) {
    int[] arr = {4, 6, 1, 9, 5, 3, 7};

    for (int i = 0; i < arr.length - 1; i++) {

        int minIndex = i;

        for (int j = i + 1; j < arr.length; j++) {
            if (arr[minIndex] > arr[j]) {
                minIndex = j;
            }
        }

        int tmp = arr[i];
        arr[i] = arr[minIndex];
        arr[minIndex] = tmp;
    }

    for (int b = 0; b < arr.length; b++) {
        System.out.print(arr[b] + ", ");
    }
}

有一个更简单的方法 Arrays.sort(arr)

    public static void main(String[] args) {
        int[] arr = {4,6,1,9,5,3,7};

        Arrays.sort(arr);
        System.out.print(Arrays.toString(arr));
        }
}

选择排序-java代码

  class selectionsort{
    public static void sort(int[] arr){
    int temp,min;
    for(int i=0;i<arr.length;i++)
        {
        min=i;
            for(int j=i+1;j<arr.length;j++)
            {
            if(arr[min]>arr[j])
                {
                min=j;
                }
            }
            temp=arr[min];
            arr[min]=arr[i];
            arr[i]=temp;
        }
    }
    
    public static void main(String [] args){
    int ar[]={4,6,1,9,5,3,7};
    sort(ar);
    System.out.print("After sort :");
      for(int j=0;j<ar.length;j++){
            System.out.print(ar[j]+" ");
      }
    }
  }