C++实现的插入排序和希尔排序


最近开始学习C++的STL,眼界豁然开朗,这的确是个很有用的东西。刚刚开始学习,用vector写了一个插入排序的例程和一个Shell排序的例程,并简要做一下分析。

以下是InsertSort的例程:

对于外层的循环for(int i = 1; i < a.size(); i++)来说,数组a的大小为a.size(),这是模板类vector的一个成员函数,初始的变量为数组a的第二个元素a[1];然后进入内层的循环,初始值为a[1],将它与a[0],相比较,若小则将它与a[0]交换。最后一行采用语句:a[ j ] = temp,避免了使用明显的数据交换。

至于InsertSort的性能是显而易见的,它每次嵌套循环都使用了N次迭代,所以它是O(N2)的。


下面来介绍一个使用shell增量的Shell排序的例程代码如下:

对于最外层的for循环来说,它是来控制增量的,这里使用的简单的shell增量,初始值为gap,它的大小为数组大小的1/2,然后逐次减半。里面的两层循环和Insertsort例程的比较类似,所以插入排序可以看成是增量为1时的Shell排序;其中,第二层的循环提供了若干个增量为gap的子序列。最内层的循环则是将子序列中相邻的元素进行比较,并进行交换。

20:03:17

 

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值