写下冒泡排序…冒泡排序是非常经典的一个排序了吧 排序入门算法(?
所以这篇文章打算讲讲冒泡排序的两种实现方法
(接下去依旧以升序排序为例
冒泡排序 从名字上来看 就是把大的数往下沉,小的数往上浮 沉浮的依据是与相邻的数进行比较来决定是否上浮以及下沉
例如: 给出一组数 1 4 3 2 5 从第一个数开始 每个数都与相邻的数比较 遇到小的则进行交换
(当然从尾部开始比较也可以就不写了= =
如何交换?引入第三个变量即可
来看以下代码
for i=1 to n-1
for j=i+1 to n
if a(j)<a(j-1)then t=a(j):a(j)=a(j-1):a(j-1)=t
next j
next i
对以上方法进行优化
可以引入一个逻辑型变量进行判断 如果这次循环中没有进行交换 那么可以提早退出
来看以下代码
for i=1 to n-1
flag=false
for j=i+1 to n
if a(j)<a(j-1)then t=a(j):a(j)=a(j-1):a(j-1)=t:flag=true
next j
if flag=false then exit for
next i
对以上排序算法进行改进 将数列分成头尾两个部分,头部有n-1个数,尾部有第n个数
将头部的最后一个数与尾部的第一个数进行比较,如果顺序不对则进行交换
由以上可知,每次排序后,尾部的数都是有序的,所以当相邻的两个数不进行交换时,则可提前结束这次排序。
(当然把尾部分成n-1个数也可以写这里就不写了例如:1 4 3 2 5 分成1 4 3 2 5 将2与5进行比较 不用交换 则下一次分组为1 4 3 2 5
3与2比较 进行交换1 4 2 3 5 再将3与5进行比较 发现不交换 则下一次分组为 1 4 2 3 5 4与2比较 进行交换1 2
4 3 5 将4与3比较 交换1 2 3 4 5 4与5比较 不交换 (举例的数好像不是很好…不好意思
来看以下代码
for i=1 to n-1
for j=n-i to n-1 ‘实现分组
if a(j)>a(j+1) then
t=a(j):a(j)=a(j+1):a(j+1)=t
else
exit for
end if
next j
next i
定义依旧需要自己补上 由于这次讲的算法比较简单所以没怎么加注释
某只会vb6.0的不知名高中生