微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决JAVA/选择排序:控制台显示的结果与我输入的结果不同

我正在学习如何实现 selection sort

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

但控制台显示9,1,9,1

我应该改变什么才能得到正确的结果?

这是我的代码

public static void main(String[] args) {
        int[]arr = {4,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 中,您需要找到最小值并将其放置在每个 ithi 位置。所以你每次迭代只交换一次。在冒泡排序中,我们像你一样反复交换。

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

public static void main(String[] args) {
    int[] arr = {4,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,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,7};
    sort(ar);
    System.out.print("After sort :");
      for(int j=0;j<ar.length;j++){
            System.out.print(ar[j]+" ");
      }
    }
  }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。