在有序数组中插入元素并利用该方法进行插入排序

这个方法必须是在有序数组中进行插入,所以插入前要先排序。

template<class T>
void insert(T a[],int& n,const T& x)
{
	int i;
	for (i=n-1;i>=0&&x<a[i];i--)
	{
		a[i+1]=a[i];
	}
	a[i+1]=x;
	n++
}

这个代码从数组的最后一位即n-1位元素开始进行操作,首先将其与x进行比较,如果比x大,那么将其往后移一位,

然后再将n-2的元素与x进行比较,如果比x大则将其移到n-1的位置,如此下去,当n-k位置的元素比x小的时候,那么就

把x放到n-k+1的位置,也就是放到a[i+1]的位置。这样插入就完成了。

这里有一点要注意的,那就是数组a的容量一定要大于n,不然会出问题的,因为最后一位元素没位子供他往后移了。


下面介绍一种插入排序方法:

template<class T>
void insertionSort(T a[],int n)
{
	for(int i=1;i<n;i++)
	{
		T t=a[i];
		insert(a,i,t);
	}
}
不好意思,代码就只有这么点。我们将数组a分成两个部分,一个部分称为有序部分,另一个称为无序部分,最开始,有序部分只有a[0]这一个元素,无序部分为后面所有的元素。首先将无序部分的第一个元素a[1]作为我们第一个要插入的元素,a[0]作为被插入的有序数组,那么insert(a,1,a[1])就是将a[1]插入到有序数组a[0]里面,这时有序数组变为a[0:1],无序部分减少一个,接下来以同样的方式将无序部分的a[2]插入到有序部分的a[0:1],那么有序部分变为a[0:2],无序部分减少以,一直下去,知道无序部分变为0,即完成插入排序。


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值