随笔 - 181  文章 - 15  trackbacks - 0
<2007年6月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

常用链接

留言簿(1)

随笔分类

随笔档案

My Tech blog

搜索

  •  

最新评论

阅读排行榜

评论排行榜

数据结构第一章讨论了一些有关算法的问题.在这一部分再次引入了那个经典的算法--冒泡排序法。
如果让我来描述一下这个算法的过程的话,我会这样描述:
从第一个元素开始和依次进行比较,大的那个放在后面,一直到最后一个元素。这样最后一个元素就会成为最大的那个;除刚才产生的最大的那个元素外,再次从头开始比较,一直到第一个元素没得可比为止。
这是我的理解。进而通过这个理解,我可以写出这个算法来。这没有问题。但是当我看到原版的算法的时候,我立即就感觉出差别来了:

1 void bubble_sort(int a[],int n)
2 {
3      for(i=n-1,change=TRUE;i>1&&change;--i)
4      {
5          change=FALSE;
6          for(j=0;j<i;++j)
7              if(a[j]>a[j+1]{a[j]<-->a[j+1];change=TRUE;}
8      }
9 }
注意变量change。这里体现的思路是:如果在某一次比较过程中没有移动任何元素,那么就没有必要再从头比较一次了。因为实际上已经得到了一个排好序的数组。
这样对于相当多的情况来讲,减少了很多的不必要操作,自然平均时间复杂程度就降低了。
因为我往往只考虑到比较坏甚至极端的情况(比如完全逆序),所以自然就会忽略这些看上去不太坏,甚至是非常好的情况,这样一个直接的结果就是让那些好的情况下的操作也变得繁琐异常,而仅仅是为了照顾那些比较难于出现的个别异常情况,现在想想,这样做不可取。日后应当注意。
posted on 2007-06-10 22:34 littlegai 阅读(496) 评论(0)  编辑 收藏 引用 所属分类: 我的读书笔记

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理