加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

证明冒泡排序法的正确性

(2011-04-26 11:38:23)
标签:

算法

证明

it

本人的第一篇技术的博文,就发些简单点的东西吧~都是原创的,希望大牛们看到不要见笑哈~http://www/uc/myshow/blog/misc/gif/E___6725EN00SIGG.gif

首先,我们先用伪代码写出冒泡排序法
BUBBLESORT(A)
1  for i<--1 to length[A]
2 do for j<--length[A]downto i+1
3 do if A[j]<A[j-1]
4 then exchange A[j]<-->A[j-1] ///交换
我们先一步一步来:
首先看到2~4行,这是一个内循环。我们先假定i==1(外循环的第一轮迭代),以此来证明内循环的正确性。

内循环的思路是每次循环都要保持A[j]为A[j..n]的最小数。而其他则是保持不变

初始化:内循环第一轮迭代时,j==length[A],所以我们可以知道子数组A[j..n]只有一个数A[j](n就是length[A])。显然,在A[j..n]中,最小的数就是A[j]。
保持:内循环每一轮开始迭代之前,有A[j]是A[j..n]的最小数。而在每一轮迭代结束后由于
//

//
的作用,会使A[j]仍然是A[j..n]的最小数。这样就能保持了。
终止:当j==i时,循环就会终止了。由于3~4行是和前面一个元素进行比较并且交换的。所以,能保证A[i]为A[i..n]的最小元素

可能看到这里以后,大家会感觉不到内循环有什么用。就让我们结合外循环进行分析,得出它的作用吧!

外循环的思路是每次迭代开始前都会有A[1..i]是排序好的。

初始化:第一轮开始的时候,A[1..i]只有一个元素,显然是排序好了。
保持:(The Point!!)每次开始迭代的时候,A[1..i]都是排序好的。而迭代时内循环将会使A[j..n]保持A[j]是最小的(大家注意到没A[j]就是A[i])。而A[j..n]每次给出的A[j]都不会小于前一次外循环得到的A[j]。故A[1..i]的性质得到了保持。(可能这样有点难以理解,不过常识下拿点简单的数试试就可以理解了)
终止:当i==n时,外循环结束。同时A[1..i](就是A[1..n])的性质得到保持(已排序的性质)。

至此~第一篇博文写完啦~~希望大家支持。下次有机会给大家介绍些web方面的。


0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有