终于开始写算法了…由于自己最生疏的就是插入排序所以先写插入= =
我们先来看下插入排序是怎么实现的
(以升序排序为例)
给出一组数如下:
1 3 5 4 2 将3与1比较 1<3所以不执行交换
接下去比较5与3 仍然不交换 接下去比较5和1
发现依旧不用交换 退出此时的循环 接下去对4进行比较 4<5 4>3 那么将3 5之间空出一个位置 将4插入3和5之间
得到1 3 4 5 2
接下去将4和3 1比较 发现不交换 退出此时的循环
接下去比较2和5 得到1 3 4 2 5
再将2与4进行比较 得到1 3 2 4 5
再往前比较得到1 2 3 4 5 最终完成后退出循环
可以想象一下洗牌的过程 不停的往前比较插入
我个人觉得难点就在于空出位置那一步= =(经常把自己搞晕了orz
来看以下代码
For i=2 to n
t=a(i) '记录一下当前的a(i)值防止后面丢失
j=i-1
Do while t<=a(j) '当当前数比前面数小时执行
a(j+1)=a(j) '将j位置的数赋值给后一个数 实现空出位置
j=j-1 '进行往前比较
if j=0 then exit do
loop
a(j+1)=t '将空出的位置用要插入的数补上
next i
我们可以看出
这里的插入是会在某个位置形成两个一样的数 最后用要插入的数覆盖掉实现往后挪位的
如 1 3 5 4 2 到 1 3 5 5 2 到 1 3 4 5 2
当然如果是一串有序数插入某个数就非常简单啦 原理是一样的 都是通过标记位置实现 这里就不加赘述了
由于是属于给萌新看的小白教程(以及自己回顾)所以尽可能多的加了注释…希望有帮助
不过听说我们下一届换了一种语言学… 不过我依旧只会vb
打算下次试着写写通用技术相关捋捋思路
有不对的或者更好的建议欢迎指正交流
某只会vb6.0的不知名高中生