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。关于我做错了什么的提示?
答案 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));
}