最近学到了排序算法,我也试着用扑克牌排序的思想来写"改进”代码,但是运行达不到预期
public static int[] sortInsertionX(int[] arr){
// 输入与预期不一致
int[] count = new int[2];
int tmp;
for(int i=1; i<arr.length; i++){
tmp = arr[i];
for(int j=i-1; j>=0; j--){
if(arr[j] > tmp){
arr[j+1] = arr[j];
}else{
arr[j+1] = tmp;
break;
}
}
arr[0] = tmp;
}
return count;
}
为避免答非所问,我说下情况,我看过别人写的Insertion Sort排序算法,我自己按照他的那个方式也能写出来,只是我像看下能不能改进,减少“交换”时的赋值语句的次数:
我的想法是:
*像打扑克牌的时候一样,从第二张扑克牌开始,挨个往前比,外层循环是要插入的牌,内层循环是要比较的牌;
1)如果要比较的牌比要插入的牌大,就往后移一格(赋值一次就行了,不用像“交换”那样赋值三次,这是我认为可以尝试提高效率的地方)
2)如果要比较的牌比要插入的牌小,就在比较的牌之后插入并跳出循环
我试了一些简单的情况,“交换”的代码运行结果没问题,但是我上面这些代码就达不到预期结果。