一句话明白排序算法之三——插入排序

1.核心思想:

每步将一个待排序的记录,按其关键码值的大小插入前面已经排序的文件中适当位置,直到全部插入为止,得到一个新的有序序列。


2.排序演示:


 

3.排序方法:

   

⒈ 从第一个元素开始,该元素可以认为已经被排序
⒉ 取出下一个元素,在已经排序的元素序列中从后向前扫描
⒊ 如果该元素(已排序)大于新元素,将该元素移到下一位置
⒋ 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置
⒌ 将新元素插入到下一位置
⒍ 重复步骤2~5

4.代码部分

  (1).这是严格按照定义书写的代码(由大到小排序): 

<span style="font-size:18px;">'对10个随机数由大到小进行排序,用插入排序法
   '对随机数从第2个一直遍历到第10个
   For i = 2 To 10
     '如果第i个数大于他的前一个数,就执行下面的操作
     If a(i) > a(i - 1) Then       '不满足这个条件,证明a(i)已经小于了前面所有的数,不需做比较,直接就可以扩充为一个有序区
        '把数组a(i)的值保存在变量temp中
        temp = a(i)
        '让temp和他前面所有的数(设下标为j)从      右向左依次做比较,,如果temp>a(j),则将a(j)的值向后移,直到遇到temp<a(j)为止
        'j等于i-1 到 1
        For j = i - 1 To 1 Step -1
          '如果temp<a(j),就说明了temp<a(j)之前的所有数,不需要再做比较,直接退出就可以
          If temp < a(j) Then Exit For
             '否则将a(j)的值向后移到a(j+1)的位置,腾出a(j)空间
             a(j + 1) = a(j)
             
        Next j
        a(j + 1) = temp
     End If
    Next i</span>
       

    (2)可以将a[j+1]插入到前面a[0…j]的有序区间所用的方法进行改写,用数据交换代替数据后移。如果a[j+1]前一个数据a[j] < a[j+1],就交换a[j]和a[j+1],再j--直到a[j+1] >= a[j]。这样也可以实现将一个新数据新并入到有序区间。

 

'遍历数组元素从第2个到第10个
For i = 2 To 10
  '让数组第i个元素中的数据和它前面的元素从右到左进行比较,大于它前一个元素则交换位置
  For j = i - 1 To 1 Step -1
    If a(j) > a(j + 1) Then Exit For
      '交换位置
      t = a(j): a(j) = a(j + 1): a(j + 1) = a(j)
    End If
  Next j<span style="font-size: 18px;">
Next i</span>

总结:

插入排序的速度比冒泡,选择要快,因为不用对所有的数都进行比较,节省了时间,但当数据量比较多的时候,比较次数就不一定了。



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 22
    评论
评论 22
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

诗琪小姐姐

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

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

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

打赏作者

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

抵扣说明:

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

余额充值