java 排序

新手提问
想让输入的 数字 从小到大排列
写了一段代码

public class Testpaixu{
public static void main(String[] args){
int[] a = new int[args.length];
for (int i=0;i<args.length;i++){
a[i] = Integer.parseInt(args[i]);
for (int j=i+1;j<args.length;j++){
a[j] = Integer.parseInt(args[j]);
int c =0;
if(a[i]>a[j]){
c=a[i];
a[i]=a[j];
a[j]=c;
}
}
System.out.print(a[i]);
}

}
}

但结果总是不对
其他 正确的其他写法 我也会
请高手指点 告诉我这段代码 哪里写错了
帮忙改正下 谢谢!
楼上的 你说的太笼统 我看不懂啊

你没有很好的理解这个冒泡发比较。
举例说明,比如有4个数,为了比较这4个数的大小,外循环需要3次。
而内循环就不能这样了。第一个数比较内循环是三次,这个时候,最大的数字已经到最后面了,后面比较时没有必要比较最后面这个数字了,而比较第二个数字的时候,是和剩余的两个数字比较,但三个数仅和一个数比较。好好想明白。
想明白了,那么,你的循环就写错了, for (int j=i+1;j<args.length;j++){
这里就不应该是j<args.length,而应该是args.length-i;
还有,你自己写的整个程序思维过于混乱,按你的比较,你经过比较,最后,内循环达不到比较完所有数字的功能。
还还有,按照你的写法,你的第一个数开始和第二个数比较,这个时候大的数字放大后面了,也就是说两个数字位置交换,紧接着又和第三个数字比较,把第二个可能是很大的数字没有尿,所以,你的比较只是浪费计算机和电。
还还还有,你第一次就输出了System.out.print(a[i]);这时候这个a[i]未必是最小的
最后,对于你二次循环,你的循环最大次数是越来越少的,可是按照你的写法,他的最大值,也就是J的最大值没有变化,只是最小值逐渐增加,说的我都不知道说什么。
你的程序我不能更改
你有创新,但是在创新的基础上麻烦好好理解冒泡发的原理和思想。先拿出几个数,想明白了再创新
对此,我要说的是,这段程序是垃圾中的战斗机。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-07-23
import java.util.Arrays;

/**
* 你想做一个冒泡排序是吧, 我把你的代码改了一点儿, 基本保持你的风格不变,只是我把它封装到了一个 特定的方法中,
* 这样就不用分的在编译的时候添加参数那么麻烦了(这里完全了为了我个人的方便)
*
* @author ajax_2003
* @version 1.0, 2009-7-23
*
*/
public class Testpaixu {
public static void main(String[] args) {
String[] str = { "2", "5", "1", "4", "7", "0", "9", "3", "8", "6" };
Testpaixu.sort(str);

System.out.println(Arrays.toString(str));
}

/**
* 排序算法
*
* @param nums
*/
private static void sort(String[] nums) {
// 你这里有一个很严重的问题,就是你这个数组中所有元素的默认值都是0,这样就会影响到你后面的排序功能
// 所以我建议你还是不要用这个临时数组了, 直接如下操作就可以了
// int[] a = new int[nums.length];

for (int i = 0, a; i < nums.length; i++) {
// a = Integer.parseInt(nums[i]);

// for (int j = i + 1; j < nums.length; j++) {
for (int j = i, b; j < nums.length; j++) {
// b = Integer.parseInt(nums[j]);
String c;

// 这里截然是字符串比较,那么就直接用这个好了
if (nums[i].compareTo(nums[j]) > 0) {
c = nums[i];
nums[i] = nums[j];
nums[j] = c;
}
}
// System.out.print(a[i]);
}
}
}
第2个回答  2009-07-23
public class Testpaixu{
public static void main(String[] args){
int[] a = new int[args.length];
for (int i=0;i<args.length;i++){
a[i] = Integer.parseInt(args[i]);
for (int j=i+1;j<args.length;j++){
a[j] = Integer.parseInt(args[j]);
int c =0;
if(a[i]>a[j]){
c=a[i];
a[i]=a[j];
a[j]=c;
}
}
for(int i=;i<args.length;i++)
System.out.print(a[i]);
}

}
}
第3个回答  2009-07-22
a[i]的取值写在循环外面
因为这样第二次循环的时候比较的不是第一次循环后的值
第4个回答  2009-07-23
你的错在于你的赋值和排序混到一起了.
循环了一次后,排了一次后,你又赋值把排好数字给覆盖了.
你把赋值单提出来,在排你的序就正确了.
自己想想吧.
int[] a = new int[args.length] ;

//赋值
for( int i = 0 ; i < args.length ; i ++ )
a[i] = Integer.parseInt(args[i]);
//排序
for (int i=0;i<a.length;i++){
for (int j=i+1;j<a.length;j++){
int c =0;
if(a[i]>a[j]){
c=a[i];
a[i]=a[j];
a[j]=c;
}
}
System.out.print(a[i]);
}

}

在就提点建议:
在java里的排序都现成的方法:数组工具类java.util.Arrays,用这个类的sort()方法.集合用java.util.Collections类,这些一般能满足你的需求.本回答被提问者采纳
相似回答