排序算法2--(折半插入排序)

排序算法2–(折半插入排序)

一、算法基本思想

二分插入法与直接排序类似,只是在确定插入位置的方法是用二分法,即从第0个数据开始依次折半与待插入的数据进行比较直到找到合适的位置。

二、算法实现

2.1 伪代码实现

暂无

2.2 C语言代码实现

//折半插入排序
void BInsertSort(int a[], int n)
{
	int i,j,low,high;
	for(int i =2;i<=n;i++){
		A[0]=A[1];
		low=1;
		high = i-1;
		while(low<=high){     //折半查找
			mid = (low+high)/2;
			if (a[mid]>temp) high=mid-1;
            else low=mid+1;
		}
		for(int j=i;j>low;j--) //统一后移元素,空出插入位置
			a[j] = a[j-1];
		a[low]  =temp;		 
		}
} 

三、复杂度分析

3.1 空间复杂度

仅使用了常数个辅助单元,因而空间复杂度为O(1)

3.2 时间复杂度

折半插入排序仅减少了比较元素的次数,约为O(nlog2^n),该比较次数与待排序初始状态无关,仅取决于表中的元素个数n;而元素的移动次数未改变,它依赖于待排序表的初始状态。因此复杂度依然为O(n2)。

3.3 稳定性

稳定

3.4 适用性

适用于数据量不大的排序表

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

RockyBlog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值