排序算法—— 直接插入排序二分插入排序
Posted Java联盟
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了排序算法—— 直接插入排序二分插入排序相关的知识,希望对你有一定的参考价值。
温馨提示:文章干货,建议收藏后阅读!
伙伴们
上次分享的排序算法怎么样~
是不是比作题有意思多了~
今天我们再来分享两种算法
算法描述:
1)数据存放在数组R[0….n-1]中,排序过程的某一中间时刻,R被划分成两个子区间R[0…i-1]和R[i….n-1],其中:前一个子区间是已排好序的有序区;后一个子区间则是当前未排序的部分。
2)将当前无序区的第1个记录R[i]插入到有序区R[0….i-1]中适当的位置,使R[0…i]变为新的有序区
3)当插入第i(i≥1)个对象时, 前面的r[0], r[1], …, r[i-1]已经排好序。
举个通俗一点的例子,我们打牌(扑克牌、麻将都是呀)的时候。用的插入排序呀~想象一下~怎么样这是不是比较容易理解什么是插入排序了~嘿嘿~
算法代码:
//插入排序
private static void insertSort(int[] a) {
for(int i=0;i<a.length-1;i++){
int temp = a[i+1];
int j=i;
while(a[j]>temp) {
a[j+1]=a[j];
j--;
if (j<0) {
break;
}
}
a[j+1]=temp;
}
}
算法分析:
关键字比较次数和记录移动次数与记录关键字的初始排列有关。
最好情况下, 排序前记录已按关键字从小到大有序, 每趟只需与前面有序记录序列的最后一个记录比较1次, 移动2次记录, 总的关键字比较次数为 n-1, 记录移动次数为 2(n-1)。在平均情况下的关键字比较次数和记录移动次数约为n² /4。
直接插入排序是一种稳定的排序方法,最大的优点是简单,在记录数较少时,是比较好的办法。
算法描述:
在直接插入排序的基础上,利用二分(折半)查找算法决策出当前元素所要插入的位置。
二分查找:
找到中间元素,如果中间元素比当前元素大,则当前元素要插入到中间元素的左侧;否则,中间元素比当前元素小,则当前元素要插入到中间元素的右侧。
找到当前元素的插入位置 i 之后,把 i 和 high 之间的元素从后往前依次后移一个位置,然后再把当前元素放入位置 i。
//二分插入排序
private static void insertSort2(int[] a) {
for(int i=0;i<a.length-1;i++){
int temp = a[i+1];
int low = 0;
int high = i;
int mid;
while(low<=high) {
mid = (low+high)/2;
if (a[mid]>temp) {
high = mid-1;
}else{
low = mid+1;
}
}
for(int j=i;j>=high+1;j--){
a[j+1]=a[j];
}
a[high+1]=temp;
}
}
小伙伴们
今天的算法记住了吗?
或者我们可以叫它
打牌算法哦~
嘿嘿~
我是萌新娜娜
立志做一个不翻车的老司机
学习Java的路上请多多指教
有任何问题都可以在文章留言,娜姐都看着的呢!
合作,投稿,转载,版权问题请联系 李娜:Lina_Java
以上是关于排序算法—— 直接插入排序二分插入排序的主要内容,如果未能解决你的问题,请参考以下文章