C++折半插入排序

折半插入排序思想:

  1. 在排序第i个数时,前i-1个数已经排序完成,这是折中排序的前提,所以在开始排序时起始位置为i=1

  2. 折中排序,顾名思义就是折中,所以在折中排序时,先要以谁开头以谁结尾,所以需要定义两个变量front,end,有了这两个变量才能够找到他们的中间值mid

  3. 排序的最终目的还是找到i的最终插入位置,本代码要求升序排序,所以只需找到比下标为i的数小的数的下标

  4. 以此时只需将mid的值与i的值作比较,如果arr[i]<arr[mid]的话,此时说明下标为i的插入位置为[0,mid-1]所以end的位置,应该为mid-1,依次类推,反之则front的位置为mid+1

  5. 当front值大于end值的时候则此时说明找到了下标为i的数的插入位置,位置为front

  6. 找到插入位置后只需将i-1到front的数向后移动一位,则此时front的位置空出来之后,将下标为i的值插入就完成了排序
    在这里插入图片描述
    代码如下:

binaryInsertSort(int arr[],int len){
	int front,end,temp;
	for(int i=1;i<len;i++){
		temp = arr[i];
		front = 0;
		end = i - 1;
		while(front <= end){
			int mid;
			mid =(front + end)/2;
			if(temp < arr[mid]){
				end = mid -1;
			}else{
				front = mid +1;
			}
		}
		for(int z=i;z>front;z--){
			arr[z] = arr[z-1];
		}
		arr[front]=temp;
	}
}
  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值