冒泡排序算法及Ruby版的简单实现

所属分类: 脚本专栏 / ruby专题 阅读数: 831
收藏 0 赞 0 分享

算法原理:

比较相邻的元素。如果第一个比第二个大,就交换他们两个。
对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
针对所有的元素重复以上的步骤,除了最后一个。
持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

实现
假设有这样一个数组: [4, 1, 3, 2]
冒泡排序为从第一个数开始,吧这个数与后面的数比较,如果这个数比后面的大,就交换他们的位置。
比如,第一次比较4和1,发现4比1大,交换 -> [1, 4, 3, 2]
第二次比较4和3,发现还是4大,交换 -> [1, 3, 4, 2]
第三次比较4和2,仍然4比2大,交换 -> [1, 3, 2, 4]
这样在进行了第一轮循环之后,最大的数4就被顶到数组的最后去了,就像泡泡一样从水底冒起来一样。那么,要完成整个数组的排序,只需要把最大的数顶到最后,然后第二轮再把第二大的数顶到倒数第二的位置,再来第三轮。。。。一直循环下去。

回到刚才的数组,第二轮比较开始,现在的状态是[1, 3, 2, 4]
比较1和3,1小于3,跳过 -> [1, 3, 2, 4]
比较3和2,3大于2,交换 -> [1, 2, 3, 4]
这一轮到这里就可以停止了,因为第一轮已经把最大的4顶到了最后,所以第二轮只要确保第二大的数顶到倒数第二就行。

然后继续第三轮(虽然目前看起来已经排序完成了)
比较1和2,不用交换[1, 2, 3, 4]
这里比较就全部完成。原理非常简单。

def bubble_sort(list)
 list.each_index do |index|
  (list.length - index - 1).times do |e|
   if list[e] > list[e + 1]
    list[e], list[e + 1] = list[e + 1], list[e]
   end
  end
 end
end

更多精彩内容其他人还在看

Ruby一行代码实现的快速排序

这篇文章主要介绍了Ruby一行代码实现的快速排序,本文直接给出实现代码,超级简洁的一个的方法,需要的朋友可以参考下
收藏 0 赞 0 分享

Ruby实现的3种快速排序算法

这篇文章主要介绍了Ruby实现的3种快速排序算法,本文给出了快速排序的普通版本、快速排序的随机化版本、快速排序的利用了Ruby的语法糖的随机化版本三个版本,需要的朋友可以参考下
收藏 0 赞 0 分享

Ruby实现的最优二叉查找树算法

这篇文章主要介绍了Ruby实现的最优二叉查找树算法,本文直接给出实现代码,需要的朋友可以参考下
收藏 0 赞 0 分享

Ruby实现的最短编辑距离计算方法

这篇文章主要介绍了Ruby实现的最短编辑距离计算方法,本文直接给出实现代码,需要的朋友可以参考下
收藏 0 赞 0 分享

Ruby实现的最长公共子序列算法

这篇文章主要介绍了Ruby实现的最长公共子序列算法,本文直接给出实现代码,需要的朋友可以参考下
收藏 0 赞 0 分享

Ruby实现的合并排序算法

这篇文章主要介绍了Ruby实现的合并排序算法,本文直接给出实现代码,需要的朋友可以参考下
收藏 0 赞 0 分享

Ruby实现的矩阵连乘算法

这篇文章主要介绍了Ruby实现的矩阵连乘算法,本文直接给出实现代码,需要的朋友可以参考下
收藏 0 赞 0 分享

Ruby实现的各种排序算法

这篇文章主要介绍了Ruby实现的各种排序算法,本文给出了Bubble sort、Insertion sort、Selection sort、Shell sort等排序的实现方法,需要的朋友可以参考下
收藏 0 赞 0 分享

Ruby实现生产者和消费者代码分享

这篇文章主要介绍了Ruby实现生产者和消费者代码分享,本文直接给出实现代码,需要的朋友可以参考下
收藏 0 赞 0 分享

Ruby中require、load、include、extend的区别介绍

这篇文章主要介绍了Ruby中require、load、include、extend的区别介绍,require、load用于文件,如.rb等等结尾的文件,include、load则用于包含一个文件中的模块,需要的朋友可以参考下
收藏 0 赞 0 分享
查看更多