C语言算法--折半插入排序

本文介绍了一种改进的插入排序算法——折半插入排序。该算法通过采用折半查找来确定待插入元素的位置,从而减少了传统直接插入排序中不必要的比较次数。文中提供了一个具体的C语言实现案例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

代码:https://github.com/xianzhixianzhixian/algorithm.git

折半插入排序算法思想:

    折半插入排序算法思想和直接插入算法思想大体上一致,将一个数字插入已经有序的数组中;不同的地方是,折半插入排序中找插入位置使用的方法是折半查找算法。

#include<stdio.h>

/**
  * 折半插入排序算法 2018.07.22
  */
int main()
{
	int array[10] = {10,1,3,2,75,1000,379,0,-1,10};
	//插入排序算法下标从一开始
	for(int i=1;i<10;i++)
	{
		int start = 0; //有序数组的开头下标
		int end = i-1; //有序数组的末尾下标
		int dist = array[i]; //要被插入的数
		int middle = 0;
		//查找要被插入的下标
		while(start <= end)
		{
			middle = (start+end)/2;
			if(dist < array[middle])
			{
				end = middle-1;
			}
			else
			{
				//这里包含==的情况,当被插入的数大于或等于当前index的数时那么start的index就必须向右移
				//向右移之后若符合条件则当前的下标即为目标数插入的下标,所以最后是array[start]=dist;
				start = middle+1;
			}
		}
		//所有数右移,移完之后插入目标数
		for(int j=i;j>start;j--)
		{
			array[j] = array[j-1];
		}
		//交换array[i]与array[start]的位置
		array[start] = dist;
	}
	for(int i=0;i<10;i++)
	{
		printf("%d ",array[i]);
	}
	return 0;
}

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值