public void sort(int[] arr) {
        int tmp;
        for(int i = 1; i < arr.length; i++) {
            // 待插入数据
            tmp = arr[i];
            int j;
            for(j = i - 1; j >= 0; j--) {
                // 判断是否大于tmp,大于则后移一位
                if(arr[j] > tmp) {
                    arr[j+1] = arr[j];
                }else{
                    break;
                }
            }
            arr[j+1] = tmp;
            System.out.println(i + ":" + Arrays.toString(arr));
        }
    }
为什么是arr[j+1] =tmp,而不是arr[j] = tmp?

解决方案 »

  1.   

    冒泡法属于排序中最经典的算法之一,需要熟记。 public static void sort(int[] a) {
    for (int i = 0; i < a.length; i++) {
    for (int j = i + 1; j < a.length; j++) {
    if (a[i] > a[j]) {
    int tmp = a[i];
    a[i] = a[j];
    a[j] = tmp;
    }
    }
    }
    }
      

  2.   

    private static void sort(int[] numbers)
        {
            int change = 0;
            for(int i = 1; i < numbers.length; i++)
            {
                boolean flag = true;
                for(int j = 1; j <= numbers.length - i; j++)
                {
                    if(numbers[j-1] > numbers[j])
                    {
                        change = numbers[j-1];
                        numbers[j-1] = numbers[j];
                        numbers[j] = change;
                        flag = false;
                    }
                }
                if(flag)
                {
                    break;
                }
            }
        }
      

  3.   

    增加flag标记,就是说某次循环扫描到已经有序了,就不会再做下次扫描了,直接结束
      

  4.   

    [
                        flag = false;
                    }
                }
                if(flag)
                {
                    break;
                }
            }
        }[/code]
    增加flag标记,就是说某次循环扫描到已经有序了,就不会再做下次扫描了,直接结束我那个是插入排序,不好意思打错了
    增加flag标记,就是说某次循环扫描到已经有序了,就不会再做下次扫描了,直接结束
      

  5.   

    我看了半天没明白,原来是你自己写的,应该有问题,你的j值都不确定, arr[j+1] = tmp; 就这一句看了半天,在想是什么,楼上有冒泡,看下吧,两层循环里比较,在内层定义个中间变量交换就完事了
      

  6.   

    */
    //冒泡排序 这样写不是更好。
    /*
    int arr[]={20,29,3923,349};
    for(int i=0; i<arr.length-1; i++){
    for(int j=0; j<arr.length-i-1; j++){
    if(arr[j]>arr[j+1]){ //如果前面的这个数大于后面的这个数
    int demo=arr[j]; //先把前面这个赋值给临时变量
    arr[j]=arr[j+1]; //把后面这个赋值给前面
    arr[j+1]=demo;   //再把前面的这个数赋值给
    }
    }
    }
    for(int i:arr){
    System.out.println(i);
    }