近来闲着没事,把《数据结构》温习了一遍,想着用图解的方式来描述一下排序的算法。好了,废话少说,下面进入正题。
先讲最简单的冒泡排序。
一、定义及算法原理
1.什么叫冒泡排序?
形象的说就是水泡由小到大从底下往上冒,最终形成从上到下按小到大顺序排列的序列。
2.基本算法原理
元素从底到上,两两比较进行交换,小的值放在上面,直到最后,形成由小到大的序列。
3. 图形表示,下图是排序后的最终结果,怎么样?
如果没有理解冒泡排序,是否看得一头雾水?如果您已经掌握这个简单的排序,恭喜您,您可以不用往下看了。
接着继续,以上只是最终的结果,这个结果是怎么来的呢?请看以下图形演示。
二、图解排序实现过程:
第一遍
top=0,bottom=len-1到1
从这个图中,你看到了什么?没错,蓝色的10从最底下开始往上比较,相连的数比它大则交换,直到最顶端,变成绿色表示已经排好了位置,
它上面的数到跑到下面来,等待下一轮的排序。
第二遍
top=1, bottom=len-1,到2。这轮过后,10, 20两个数排好了位置,比它大的数都排在它的下面。
第三遍
top=2, bottom=len-1, 到3
第四遍
top=3, bottom=len-1, 到4
第五遍,也是最后一遍
top=4,bottom=len-1, 到5,len(元素个数)=6, 也就是比较最后2个元素的大小,50<60, 什么都不用处理,排序结束。
如何? 通过以上的图形演示过程,应该明白冒泡排序的算法过程了吧?如果还不明白,只能说我的水平太烂,呵呵。
三、程序实现步骤图
紫色圈圈是待排序的元素,橙色的是排序步骤,只有3步,是否很简单?
1. top=0, 到len-2
2. bottom=len-1, 到top+1
3. 从最后开始比较2个元素的大小,如果底下那个比上面的小,则交换位置。
四、C语言代码实现
好了,演示结束,这是一个很简单的冒泡排序,也许你根本不用看就能一口气写出这个算法的程序。
现在只是用这个简单的图解步骤演示排序的过程,后面会用这种方法演示一些复杂一点的排序算法,有助于我们的理解。
谢谢!