珠排序非常另类[地精也很另类],看完你就知道了,先介绍思路,再分解过程

这是它的英文论文 http://www.cs.auckland.ac.nz/~jaru003/research/publications/journals/beadsort.pdf

截图即从上边的论文里抓的屏

先了解一个概念,不然不容易理解,一个数字3用3个1来表示

一个数字9用9个1来表示,珠排序中的珠指的是每一个1,它把每一个1想像成一个珠子,这些珠子被串在一起,想像下算盘和糖葫芦

图1

上图1中的三个珠就表示数字3,两个珠表示数字2,这个OK了继续,这里的3和2都叫bead

图2

图2(a)中有两个数字,4和3,分别串在四条线上,于是数字4的最后一个珠子下落,因为它下边是空的,自由下落后变成图2(b)

图2(c)中随机给了四个数字,分别是3,2,4,2,这些珠子自由下落,就变成了(d)中,落完就有序了,2,2,3,4

以上就是珠排序的精华

图3

上图3中的n表示待排序数组的长度,有多少数字就有多少层,横向表示一层

m表示有多少个珠子,就是多少个1,这取决于最大数是几

比如待排数组[6 2 4 1 5 9]

让珠子全部做自由落体运动

9没有什么好落的,它在最底层

5也没有什么好落的,全部有支撑点

1同样不需要滑落

4除了第一个珠子不动外,其它三颗全部下落,落到1的位置变成下边这样

过程的细节不画了,原则就是你下边有支点,你就不用再滑落了,最后变成下边这样,排序完毕

从上到下顺序输出即可得到结果:[ 1 2 4 5 6 9]

经典排序算法(十六)--珠排序Bead Sort相关推荐

  1. 数据结构与算法(十六)冒泡排序和鸡尾酒排序

    冒泡排序(Bubble Sort)是一种交换排序,它的基本思想是:两两比较相邻记录的关键字,如果反序则交换,以将当前序列的最小值交换到当前序列最前端为一轮结束,需要(length-1)轮,感觉数据是一 ...

  2. 排序算法——十大排序算法的图示与实现

    十大排序算法概览 比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序. 非比较类排序:不通过比较来决定元素间的相对次序,它可以突破基于 ...

  3. 排序算法 - 面试中的排序算法总结

    排序算法总结 查找和排序算法是算法的入门知识,其经典思想可以用于很多算法当中.因为其实现代码较短,应用较常见.所以在面试中经常会问到排序算法及其相关的问题.但万变不离其宗,只要熟悉了思想,灵活运用也不 ...

  4. Java常见排序算法之直接选择排序

    在学习算法的过程中,我们难免会接触很多和排序相关的算法.总而言之,对于任何编程人员来说,基本的排序算法是必须要掌握的. 从今天开始,我们将要进行基本的排序算法的讲解.Are you ready?Let ...

  5. 《数据结构与算法》实验:排序算法实验比较——选择排序 堆排序

    <数据结构与算法>实验和课程Github资源 <数据结构与算法>实验:线性结构及其应用--算术表达式求值 <数据结构与算法>实验:树型结构的建立与遍历 <数据 ...

  6. php递归算法排序,php常用的排序算法代码[冒泡,递归排序-PHP源码

    <script>ec(2);<script> php 常用的排序算法代码[冒泡,递归排序 冒泡排序算法 function bubblesort($arr) { $n=count ...

  7. 数据结构之排序算法:并归排序

    排序算法:并归排序 思维导图: 归并排序的定义: 俩个有序线性表的合并: 归并排序的代码实现: 归并排序的性能: 思维导图: 归并排序的定义: 俩个有序线性表的合并: int *B = (int *) ...

  8. 排序算法:简单选择排序算法实现及分析

    简单选择排序算法介绍 简单选择排序(Simple Selection Sort)就是通过n-1次关键字排序之间的比较,从n-i+1个记录中选择关键字最小的记录,并和第i(1<=i<=n)记 ...

  9. php代码编写直接插入排序算法,PHP排序算法之直接插入排序(Straight Insertion Sort)实例分析...

    本文实例讲述了PHP排序算法之直接插入排序(Straight Insertion Sort).分享给大家供大家参考,具体如下: 算法引入: 在这里我们依然使用<大话数据结构>里面的一个例子 ...

  10. java选择排序代码_Java排序算法总结之选择排序

    本文实例讲述了Java排序算法总结之选择排序.分享给大家供大家参考.具体分析如下: 选择排序的基本操作就是每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部 ...

最新文章

  1. 程序世界的秘密(中)
  2. python的一些常用操作
  3. plSQL复制数据的方法
  4. 文献记录(part46)--Building Outlier Detection Ensembles by Selective Parameterization of ...
  5. java 委托原则_为什么说 Java SPI 的设计违反双亲委派原则
  6. JAVA中用于处理字符串的 三兄弟
  7. 陈天奇:十年机器学习科研之路(附链接)|湾区人工智能
  8. ssm框架数据查询一直为null
  9. exists查询慢_我大意了!这些问题让我的MySQL慢了十倍。
  10. matlab2009a安装包,matlab2009a安装
  11. 如何选择VC界面库产品
  12. python启动方法_python启动服务
  13. 04 _ 可扩展架构案例(一):电商平台架构是如何演变的?
  14. 宿舍计算机管理制度,【宿舍门禁系统能统计夜不归宿吗】_学生宿舍门禁系统使用管理规定(试行)...
  15. 《2022 中国开源贡献度报告》首次发布!
  16. java set拷贝_Java之深浅拷贝
  17. Vue.js(二) 模板语法
  18. 操作系统复习(二)——操作系统主要功能
  19. Java 老矣,尚能饭否?
  20. File和path的用法

热门文章

  1. 每天花30分钟看OGRE--(13)Ogre的渲染流程,在渲染时材质是如何起作用的,材质加载和解析...
  2. 一个gSOAP web服务可以用多线程技术来处理请求
  3. zz JQuery 插件
  4. Android开源框架源码分析:Okhttp
  5. scp 不输入密码登录
  6. UVa 10950 - Bad Code
  7. 计划产量导入功能修改:
  8. C# DataTable 按数字排序问题
  9. 22. yii 2 sql
  10. 5.自定义MAGENTO主题