2 mr jiangtianwen Mr_JiangTianWen 于 2016.09.09 09:40 提问

我的java数组排序后为什么和排序前是一样的顺序呢?

/*
需求:给一个数组进行排序:{5,6,9,2,1,4,8,7,3}
*/
public class ArrayDemo1
{
public static void main(String[] args)
{
int[] arr ={5,6,9,2,1,4,8,7,3};
printArray(arr);
//selectSort(arr);
bubbleSort(arr);
printArray(arr);
}
public static void selectSort(int[] a)
{
for(int x = 0;x {
for(int y =x+1;y {
if(a[x]>a[y])
swap(a[x],a[y]);
}
}
}
private static void swap(int a,int b)
{
int temp = a;
a = b;
b = temp;

}

public static void bubbleSort(int[] a)
{
for(int x = 0;x<a.length-1;x++)
{
for(int y=0;y<a.length-x-1;y++)
{

        if(a[y]>a[y+1])
        swap(y,y+1);
        }
    }
}
public static void printArray(int[] a)
{
    System.out.print("[");
    for(int x=0;x<a.length;x++)
    {
        if(x!=a.length-1)
        {
            System.out.print(a[x]+",");
        }
        else
            System.out.println(a[x]+"]");
    }
}

}
——————————————————————
打印结果是:
[5,6,9,2,1,4,8,7,3]
[5,6,9,2,1,4,8,7,3]

6个回答

xianfajushi
xianfajushi   2016.09.09 09:49

没进行交换操作,所以没排序.
交换函数应该返回交换后的值,JAVA语言不太熟悉,其他语言的话,交换函数要返回交换后的只,再填回数组原位才行.

xianfajushi
xianfajushi   2016.09.09 09:53

private static void swap(int a,int b)
{
int temp = a;
a = b;
b = temp;

}
这个函数应该改为传入数组和下标,进行数组数据交换才可实现排序.

qq_26986211
qq_26986211   2016.09.09 10:05
public static void bubbleSort(int[] a){

    for(int x = 0;x<a.length-1;x++){
        for(int y=x+1;y<a.length;y++){

            if(a[y]<a[x]){//虽然只是把交换的代码放到这里,结果就出来了。
                int temp;
                temp = a[x] ;
                a[x] = a[y] ;
                a[y] = temp ;
            }
                //swap(y,y+1);交换的时候,实质没有将数组传过去  你可以使用应该swap(int[]a,x,y) 把数组也传过去, x , y是需要交换位置的下标
        }
    }
}
JohnKnowsNothing
JohnKnowsNothing   2016.09.09 10:34

swap(y,y+1);
这行代码并没有对数组进行操作,应该传入角标和数组才能完成

u013000638
u013000638   2016.09.09 12:25

在你的swap方法中,java会采用值传递的方式进行传参。传到swap方法中的值其实是你传送的实参的一个副本!所以就算你在方法中对那个副本做任何操作,包括你现在正在做的交换工作对实参也是不起任何作用的!
解决方法也很简单,不要单独写方法,直接交换!或者在方法参数中传递数组,用数组交换!

Shirley_John_Thomas
Shirley_John_Thomas   2016.09.09 15:21

private static void swap(int a,int b)
{
int temp = a;
a = b;
b = temp;

}
这个方法出问题了,

Csdn user default icon
上传中...
上传图片
插入图片