二分法排序(折半插入排序)

二分法排序,也称为折半插入排序,是一种在插入排序中利用二分查找来提升定位效率的方法。在已排序的部分数组中,通过二分查找确定待插入元素的正确位置,从而减少比较次数,提高排序速度。本文通过示例解释了二分法插入排序的工作原理,并提供了简单的测试代码。
摘要由CSDN通过智能技术生成

有一次看到人家的面试题,什么给定一个整型数组,让用二分法对数组进行排序。一开始直接蒙了,什么叫二分法排序?后来查了一下,就是插入排序前,对前面已经排好序的元素进行折半,以期比普通的插入排序更快速定位到要插入的位置。崩溃!!!
我们用下面的图简单演示一下:
【4】为待插入的关键字,前面的【1,3,5,6,7,8,9】是已经排好序的。

开始L=0指向A【0】=1,R=6指向A【6】=9,M=(L+R)/2=(0+6)/2=3指向A【3】=6;

下面就要开始移动R或L 来找到【4】要插入的位置:

A【M】=A【3】=6>4;所以插入位置在M的左边,移动R,R=M-1=3-1=2;就是说
R=2指向A【2】=5;

此时M=(R+L)/2=(2+0)/2=1,就是说:M=1指向A【1】=3;
因为A【M】=3 < 4,所以,插入位置应该在M右边,此时移动L,L=M+1=1+1=2;这个时候,L=2指向
A【2】=5;

到此我们可以看到,L和R都指向了A【2】,折半查找插入位置结束,【4】应该插入在元素【5】所在的位置,然后就和普通插入排序一样了,把【5】以及它以后的所有元素统一向后移动一个位置,插入【4】就可以了。
这里写图片描述

下面是一段简单的测试代码:

  1 #include<stdio.h>
  2 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值