0

我在此选择排序中的输出有问题。

这是代码:

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 
4

1 回答 1

0

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

开始新的迭代时,它仍将保留旧值,因此您将与已经发现为最小值并被选中的元素进行比较。

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

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

上代码:

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] + " ");
}
于 2013-09-18T21:57:10.110 回答