本帖最后由 lenooooo 于 2010-09-02 18:55:24 编辑

解决方案 »

  1.   


    public static void main(String[] args) {int temp;
    int[] a = { 70, 22, 23, 45, 26, 88, 11, 77 };
    for (int i = 0; i < a.length; i++) {
    for (int j = i + 1; j < a.length; j++) { //每执行一次内层循环后,对应的a[i]就是从a[i]到最后所以数中最小的一个
    if (a[i] > a[j]) { // 后面的数小,则交换
    temp = a[i];
    a[i] = a[j];
    a[j] = temp;
    }
    }
    }
    for (int k = 0; k < a.length; k++) {
    System.out.print(a[k] + " ");
    }
    }
    }
      

  2.   

    比如 当i=0时  j=1 此时需要进行a.length-1次循环
    也就是第一个冒上去了
    而后冒第二个 因为已经有一个不用比较了 i=1,j=2了,所以进行a.length-2次循环
    依此类推。
      

  3.   

    第一种:
    for(int i=1;i<a.length;i++){
      for(int j=0;j<a.length-i;j++){
      if(a[j]<a[j+1]){
      int temp = a[j];
      a[j]=a[j+1];
      a[j+1]=temp;
        
      }
      }
      }
    思路:外层循环式表示冒泡排序的次数(即要经过几次内次循环去排序),内层循环是去找前a.length-i个数最小的那个数,经过第二个for循环可以使得a[a.length-i-1]这个位置的数为最小的,也就是前a.length-i个数的最后一个数已经有序了。
    第二种跟第一种类似,只不过外层for循环多了一次,里层for循环少了一次而已
    第三种:
    int temp;
    int[] a = { 70, 22, 23, 45, 26, 88, 11, 77 };
    for (int i = 0; i < a.length; i++) {
    for (int j = i + 1; j < a.length; j++) {
    if (a[i] > a[j]) {
    temp = a[i];
    a[i] = a[j];
    a[j] = temp;
    }
    }
    }
    第三种直接将a[i]与a[i+1]到a[a.length-1]之间的数一一作比较,外层for循环结束一次,就找到了a[i]到a[a.length-1]最小的那个数,然后将其存储到a[i]这个位置。
    总之,冒泡排序的思想就是让数组中数两两都要碰面去比较大小,去交换位置。
      

  4.   

    谢谢各位  特别是zxingchao2009的回答