Exchange排序算法查询

时间:2012-12-26 15:31:38

标签: java arrays algorithm sorting

所以我试图使这个算法工作,但每次运行它我得到[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);
            }
        }

    }
};

};

2 个答案:

答案 0 :(得分:2)

您正在忽略排序中的第一个元素,因为数组索引从0开始。您的第一个循环应该从索引0开始,然后以length-1开头:

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

您还需要使用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));
}

答案 1 :(得分:1)

你的输出来自哪里?

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

    ExchangeSort(array);

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

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

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

for(i=0; i<num.length-1; i++)
相关问题