插入排序数字

时间:2014-01-30 02:22:16

标签: java sorting for-loop

public void sort(){

      int temp;
      int comparisons=0;
      int countSwap=0; 
      int a []  = {7,4,1,6,3,4,2};

        for (int i = 1; i < a.length; i++) {
            for(int j = i ; j > 0 ; j--){
                if(a[j] < a[j-1]){
                    temp = a[j];
                    a[j] = a[j-1];
                    a[j-1] = temp;
                    countSwap++;
                }
                comparisons++;
            }
        }
        System.out.println("comparisons: "+comparisons);
        System.out.println("swaps: "+ countSwap);
}

我正在尝试使用插入排序,我认为这是正确的,但比较的数量是错误的。这会对数字进行排序,但它会进行更多的比较。比较应该是18,但现在是21。关于我做错了什么的提示?

1 个答案:

答案 0 :(得分:0)

您的意思是Cocktail sort吗?如果是,您的代码不是鸡尾酒排序。您的代码是Bublesort。

编辑:

21是对的。为什么它应该是18?对于第一个for循环的每个itteration,你要比较一个。所以你有6个itterations。那是1 + 2 + 3 + 4 + 5 + 6 = 21

像这样更改您的代码,您可以看到它:

public void sort(){    
    int temp;
    int comparisons=0;
    int countSwap=0; 
    int a []  = {7,4,1,6,3,4,2};

    for (int i = 1; i < a.length; i++) {
        for(int j = i ; j > 0 ; j--){
            if(a[j] < a[j-1]){
                temp = a[j];
                a[j] = a[j-1];
                a[j-1] = temp;
                countSwap++;
            }

            comparisons++;
            System.out.println("Comp "+(comparisons)+": "+a[j]+" < "+a[j-1]);
            System.out.println(Arrays.toString(a));
            System.out.println("\n");
        }
    }
    System.out.println("comparisons: "+comparisons);
    System.out.println("swaps: "+ countSwap);
    System.out.println(Arrays.toString(a));
}