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