【排序】插入排序

插入排序:将待排序记录插入已排好的记录中,不断扩大有序序列。(稳定的排序算法)
折半插入排序:寻找插入位置时采用折半查找的方法。
时间复杂度: O ( n 2 ) O(n^2) O(n2)

#include<iostream>
using namespace std;
void BinInsertSort ( int a[], int n )
{
	for ( int i=1; i<n; i++ ) {
		// 在 a[0..i-1]中折半查找插入位置使 a[high]≤a[i]<a[high+1..i-1]
		int low = 0,high = i-1;	
		while ( low<=high ) {
			int m = ( low+high )/2;
			if ( a[i]<a[m] )
				high = m-1;
			else
				low = m+1;
		}
		// 向后移动元素 a[high+1..i-1],在 a[high+1]处插入 a[i]
		int x = a[i];
		for ( int j=i-1; j>high; j-- )
			a[j+1] = a[j];
		a [high+1] = x; // 完成插入
	}
}
int main(){
	int len=6;
	int a[]={24,85,47,53,30,91};
	cout<<"original array:"<<endl;
	for(int i=0;i<len;i++){
		cout<<a[i]<<endl;
	}
	cout<<endl;
	BinInsertSort(a,len);
	cout<<"insert sort:"<<endl;
	for(int i=0;i<len;i++){
		cout<<a[i]<<endl;
	}
	cout<<endl;
	
	return 0;
} 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值