你的程序得不到从小到大排序的数组是因为你的内部for循环定义有错,你的for循环是:
for(int i=0;i<arr.length-1;i++)
{
for(int j=1;j<arr.length;j++)
{
if(arr[i]>arr[j])
{
int temp;
temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
}
}
意味着你每取一个值,都要从1角标位开始比,然后根据大小关系交换位置,这样就会造成混乱。
如果按照你的循环来比较换位的话,具体情况是这样的:
i=0时,arr[0]与a[1]——a[4]逐个比较换位,结果是 6,25,13,18,12
i=1时,arr[1]与a[1]——a[4]逐个比较换位,结果是 6,12,25,18,13
i=2时,arr[2]与a[1]——a[4]逐个比较换位,结果是 6,25,12,18,13
i=3时,arr[3]与a[1]——a[4]逐个比较换位,结果是 6,25,18,12,13 所以与你得出的结果吻合。
至于你说的System.out.println(arr);其实它的含义是打印出数组第一个值的地址值。
按照你的思路,程序只要稍作修改就OK了,如下:
class Sort
{
public static void main(String[] args)
{
int[] arr=new int[]{13,25,6,18,12};
for(int i=0;i<arr.length;i++)
System.out.print(arr[i]+" ");
System.out.println();
for(int i=0;i<arr.length-1;i++)
{
for(int j=i+1;j<arr.length;j++)
{
if(arr[i]>arr[j])
{
int temp;
temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
}
}
for(int i=0;i<arr.length;i++)
System.out.print(arr[i]+" ");
System.out.println();
}
}
把内层for循环j的初始化值改成j=i+1就行了,这样就是和每一次取值后面的几个值进行比较就行了,其实这就是选择排序法的原理,
建议你写程序的时候把排序独立封装成一个函数更好,可以提高复用性,看起来也更清晰。
|