
本教程操作环境:windows7系统、java10版,DELL G3电脑。
1、从数组的第二个元素进行操作,如果发现其前面的元素比他大,就将其前面的元素往后挪,直到cur指向的元素大于或者等于他前一个元素,此时cur指向的位置就是待插入元素应该插入的位置。
staticint[]insertSort2(int[]array){
intlen=array.length;
for(intbegin=1;begin<len;begin++){
intcur=begin;
inttmp=array[cur];
while(cur>0&&array[cur]<array[cur-1]){
array[cur]=array[cur-1];
cur--;
}
array[cur]=tmp;
}
returnarray;
}
2、通过二分查找减少了比较次数,即cmp函数的调用,还减少了swap函数的调用。更快的找到了当前元素应该插入的位置,然后再进行挪动,提高了效率。
staticint[]insertSort3(int[]array){
intlen=array.length;
for(intbegin=1;begin<len;begin++){
intv=array[begin];
intinsertIndex=search(array,begin);
//将[insertIndex,begin)范围内的元素往右边挪动一个单位
for(inti=begin;i>insertIndex;i--){
array[i]=array[i-1];
}
array[insertIndex]=v;
}
returnarray;
}
staticintsearch(int[]array,intindex){
intbegin=0;
intend=index;
while(begin<end){
intmid=(begin+end)>>1;
if(array[index]<array[mid]){
end=mid;
}else{
begin=mid+1;
}
}
returnbegin;
}
需要注意的是:使用了二分搜索后,只是减少了比较次数,但插入排序的平均时间复杂度依然是O(n^2)。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END

















































暂无评论内容