您的位置:首页 > 其它

Thinking in Insert Sort(插入排序)

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

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



算法实施的必要条件:

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,然后对之前排序的队列遍历比较,找到适当位置,直接插入就行。而且再输入元素的过程中就实现了排序,当最后一个元素输入后,找到合适位置即可,这事得出的队列就是排序好的对列,相对于输入完后在排序有一定优势。而且在待排序数据量不确定的情况下,此方法还是有很多好处的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: