选择排序给出错误的输出

时间:2013-09-18 21:49:57

标签: java selection-sort

我在此选择排序中遇到输出问题。

以下是代码:

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

        int [] arr_sort = {1, 7, 2, 18, 23, 13};

        System.out.println("Selection Sort");
        System.out.print("Before sorting: ");
        int x;
        for(x=0; x<arr_sort.length; x++){
            System.out.print(arr_sort[x] + " ");
        }

        System.out.println("");
        System.out.print("After sorting: ");

        int n = arr_sort.length;
        int i,j, min, temp;
        for(i=0; i<n; i++){
            min=1;
        for(j=i+1; j<n; j++){
         if (arr_sort[j]<arr_sort[min]){
            min=j;
            temp=arr_sort[i];
            arr_sort[i]=arr_sort[min];
            arr_sort[min]=temp;
        }

    }

System.out.print(arr_sort[i] + " ");
 }

}

}

输出:

Selection Sort
Before sorting: 1 7 2 18 23 13 
After sorting: 2 1 7 18 23 13 

1 个答案:

答案 0 :(得分:0)

在循环外声明min的事实是问题。

当开始新的迭代时,它仍将保留旧值,因此您将与已找到的元素进行比较并选择最小值。

另外,min不应该是1,而应该改为i,因为您不希望在每一步与第二个元素进行比较。

在这些更改之后,它可以正常工作,但它不是真正的选择排序,您需要找到最小值,然后才能找到交换,而不是每次找到更小的元素。

代码:

int n = arr_sort.length;
int i, j, temp; // min removed here
for (i = 0; i < n; i++)
{
  int min = i; // min declared here and changed to i
  for (j = i + 1; j < n; j++)
  {
     if (arr_sort[j] < arr_sort[min])
     {
        min = j;
     }
  }
  // moved swap to here
  temp = arr_sort[i];
  arr_sort[i] = arr_sort[min];
  arr_sort[min] = temp;
  System.out.print(arr_sort[i] + " ");
}