一文看懂经典排序算法之冒泡排序(两种实现方式)

写下冒泡排序…冒泡排序是非常经典的一个排序了吧 排序入门算法(?
所以这篇文章打算讲讲冒泡排序的两种实现方法
(接下去依旧以升序排序为例
冒泡排序 从名字上来看 就是把大的数往下沉,小的数往上浮 沉浮的依据是与相邻的数进行比较来决定是否上浮以及下沉

例如: 给出一组数 1 4 3 2 5 从第一个数开始 每个数都与相邻的数比较 遇到小的则进行交换
(当然从尾部开始比较也可以就不写了= =
如何交换?引入第三个变量即可

来看以下代码

for i=1 to n-1
for j=i+1 to n
if a(j)<a(j-1then  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-1then  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的不知名高中生

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值