public static void main(String[] args) 
{ int[] array = {63,4,24,1,3,15};
int[] newarray = arrayBubbleSort_up(array);
showarray(array);
showarray(newarray);

} public static int[] arrayBubbleSort_up(int[] array) //冒泡排序法
{
for(int i=1;i<array.length;i++)
{
for(int j=1;j<array.length;j++)
{
if(array[j-1]>array[j]) //降序将判断条件改成小于号就可以了
{
int temp = array[j-1];
array[j-1]=array[j];
array[j]=temp;
}
}
}
return array;
}

public static void showarray(int[] array) //遍历显示数组
{
for (int i:array)
{
System.out.print(" "+i);
}
System.out.println("");
}结果是   1 3 4 15 24 63
         1 3 4 15 24 63
为什么array[]数组也会被排序 
刚开始学java 很多东西不懂 劳烦高手讲解详细点 最好再说说怎么不改变原数组的方法 谢谢了 

解决方案 »

  1.   

    会被排序很正常吧,函数参数本身虽然是形参,但函数参数所引用的数组对象仍然跟主调函数中的数组对象是同一个。函数第一句话写上:
    array = Arrays.copyOf(array, array.length);
      

  2.   


    谢谢  我试了下  这样的确是可以的  
    但是我更加疑惑了  这句话表面上看  不就是  把array[]复制到array[]?
    以及这样写 为什么后面的排序算法就对本身的参数不产生排序效果了 谢谢了
      

  3.   

    对参数进行浅复制,然后用复制的数组排序。
    浅复制的数组只会复制原数组的值,不会指向原数组。
    修改了排序算法,原数组排序后顺序不变  public static int[] arrayBubbleSort_up(int[] array)    //冒泡排序法
        {
         //int [] arrTemp = array;//深复制
         int [] arrTemp = array.clone();//浅复制        for(int i=1;i<arrTemp.length;i++)
            {
                for(int j=1;j<arrTemp.length;j++)
                {
                    if(arrTemp[j-1]>arrTemp[j])    //降序将判断条件改成小于号就可以了
                    {
                        int temp = arrTemp[j-1];
                        arrTemp[j-1]=arrTemp[j];
                        arrTemp[j]=temp;
                    }
                }
            }
            return arrTemp;
        }
      

  4.   

    学习。。int [] arrTemp = array;//深复制
                        int [] arrTemp = array.clone();//浅复制