1

所以我试图让这个算法工作,但每次我运行它时,我都会得到 [10,11,7,10,7,5,7,5 ] 作为我的输出。目标是按降序获得结果。此外,当我的数组仅包含 6 个值时,我不明白为什么会有 8 个结果。请帮助..谢谢。公共类搜索{

public static void main (String[]args)
{
    int[] array = {10,7,11,5,13,8};
    //ExchangeSort(array);

};

public static void ExchangeSort(int[] num)
{
    int i,j,temp;

    for(i=1;i<num.length-1;i++)
    {
        for(j=i+1;j<num.length;j++)
        {
            if(num[i]<num[j])
            {
                temp = num[i];
                num[i] = num[j];
                num[j] = temp;

                //System.out.println(temp);
            }
        }

    }
};

};

4

2 回答 2

2

您忽略排序中的第一个元素,因为数组索引从0. 您的第一个循环应该从 index 开始0并上升到length-1

     for(i=0;i<num.length-1;i++)

您还需要在循环之外或在 main 方法中使用Arrays.toString (不需要循环)打印排序数组:

     // this will print the array elements
     System.out.println("Sorted Array: "+Arrays.toString(num));

并从方法末尾删除分号;

天文台注:您的方法名称不应以大写字母开头。

编辑:您的完整更正代码如下:

public static void main(String[] args) {
    int[] array = {10,7,11,5,13,8};
    exchangeSort(array);
    System.out.println("Sorted Array: "+Arrays.toString(array));
}
public static void exchangeSort(int[] num) {
    int temp;
    for(int i=0;i<num.length-1;i++){
        for(int j=i+1;j<num.length;j++){
            if(num[i]<num[j]){
                temp = num[i];
                num[i] = num[j];
                num[j] = temp;
            }
        }
    }
    System.out.println("Sorted Array: "+Arrays.toString(num));
}
于 2012-12-26T15:42:53.293 回答
1

你的输出来自哪里?

我之前删除了评论ExchangeSort(array);并添加了一个简单的输出:

    ExchangeSort(array);

    for (int i : array) {
        System.out.println(i);
    }

然后,当我运行您的代码时,我得到:10 13 11 8 7 5接近预期结果。位置错误,10因为您的循环索引以 1 开头,但数组索引以 0 开头。因此第一个元素不会更改。

i您可以通过将from的起始值更改为来解决此1问题0

for(i=0; i<num.length-1; i++)
于 2012-12-26T15:43:00.353 回答