Thinking in Insert Sort(插入排序)

今天重新开始阅读《算法导论》,之前虽然读过一遍,但是不是非常的深入,这是一个新的开始,希望在新的一次算法旅程中,收获更多心得!

首先我想说一下我对 插入排序 的理解,我对这个算法的分析与理解,总是在大脑中结合着衣服扑克牌,在算法的步骤中,实时滴更随着每一步操作,当需要排序或者调整某些牌的位置时,我会在头脑中做出调整,然后一步一步,最终达到自已预想和算法正确结果所预想的结果。

插入排序 - fangxia722 - 东东思考

算法实施的必要条件:

1.输入:N个数(a1,a2,a3....an);

2.输出:输入序列的一个排列(重新排序):(a1',a2',a3'....an'),使得a1'<=a2'<=a3'<=.....<=an'。


算法设计实现:

insert_sort----------------------->

for j <-----2 to length[a]

{

                  do key <----- a[j];

                  i=j-1;

                          while( i>0 && a[i]>key)

{

      do a[i+1]  <-----a[i];

      i =i -1;

}

   a[i+1]=key;

}


之前一直在想一个问题,其实对于即时输入的排序,我们是可以对插入排序做出优化的。

因为传统的插入排序在排序过程中对元素进行移动或者重新复制,这就增加了算法的操作时间,而且复制操作会对内存做一定操作,这些操作是非常耗费资源的。

所以,我在想,我们可以用链表设计实现这个范例,当有新元素需要排序插入时,我们就申请一个Node,然后对之前排序的队列遍历比较,找到适当位置,直接插入就行。而且再输入元素的过程中就实现了排序,当最后一个元素输入后,找到合适位置即可,这事得出的队列就是排序好的对列,相对于输入完后在排序有一定优势。而且在待排序数据量不确定的情况下,此方法还是有很多好处的。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值