【问题标题】:Java : Selection Sort LogicJava:选择排序逻辑
【发布时间】:2019-09-29 23:09:28
【问题描述】:

我正在使用选择排序打印排序数组元素。但是我将输入数组元素作为相同序列的输出而不进行排序。

public class SelectionSort {
        public static void main(String[] args) {

        int[] arr= {1,9,3,0,7};
        int n=arr.length;
        for(int i=0; i<n-1; i++)
        {
            int minimumIndex = i;
            for(int j=i; j<n; j++)
            {
                if(arr[j]<arr[minimumIndex])
                {
                    minimumIndex=j;
                }
            }
            int temp=arr[i];
            arr[i]=arr[minimumIndex];
            arr[i]=temp;
        }

        for(int e: arr)
        {
            System.out.print(e+" ");
        }
    }
}

预期 o/p : 0 1 3 7 9 实际输出:1 9 3 0 7

【问题讨论】:

  • 您切换两个数组项的代码是错误的。多看一点。

标签: java selection-sort


【解决方案1】:

在您的方法代码中,实际问题是交换元素,

序列需要如下所示,

int temp=arr[minimumIndex];  
arr[minimumIndex]=arr[i];
arr[i] =temp;

而不是

 int temp=arr[i];
 arr[i]=arr[minimumIndex];
 arr[i]=temp;

【讨论】:

    【解决方案2】:

    我看到了两个问题。一种是你交换物品的方式。您需要替换找到最小索引的项目。此外,您的 J 索引应该在您的 I 索引之后开始。您可以假设在循环时它之前的那个是最小的。我已经更改了几段代码并对其进行了测试,它对我来说效果很好。

            for (int i = 0; i < arr.length - 1; i++)
            {
                int minimumIndex = i;
    
                for (int j = i + 1; j < arr.length; j++)
                {
                    if (arr[j] < arr[minimumIndex])
                    {
                        minimumIndex = j;
                    }
                }
    
                int temp = arr[i];
                arr[i] = arr[minimumIndex];
                arr[minimumIndex] = temp;
            }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-20
      • 1970-01-01
      相关资源
      最近更新 更多