号称最简单的排序算法,只有一层循环,默认情况下前进冒泡,一旦遇到冒泡的情况发生就往回冒,直到把这个数字放好为止

直接看它排序的过程,待排数组[6 2 4 1 5 9]

先设计一个标识i=0然后从头开始判断,什么时候(i < 6)不成立,什么时候排序结束,

所以,如何控制i的值是这个算法的关键

例如待排数组:

[6 2 4 1 5 9]

[0 1 2 3 4 5]

看一下具体的排序过程

[ i = 0 ]时啥也不干,先让i自增1,达到值为1才开始真正的比较

交换前[6 2 4 1 5 9][ i = 0]

交换后[6 2 4 1 5 9][ i = 1]

[ i = 1 ]比较6和2,发生交换,只要发生交换i就减1

交换前[6 2 4 1 5 9][ i = 1]

交换后[2 6 4 1 5 9][ i = 0]

[ i = 0 ]又成0了,啥也不干,自增变成1再说

交换前[2 6 4 1 5 9][ i = 0]

交换后[2 6 4 1 5 9][ i = 1]

[ i = 1 ]再比较2和6,不交换,只要不要换就自增1

交换前[2 6 4 1 5 9][ i = 1]

交换后[2 6 4 1 5 9][ i = 2]

[ i = 2 ]比较6和4,发生交换,只要交换就减1

交换前[2 6 4 1 5 9][ i = 2]

交换后[2 4 6 1 5 9][ i = 1]

[ i = 1 ]比较2和4,不交换,只要不交换就自增1

交换前[2 4 6 1 5 9][ i = 1]

交换后[2 4 6 1 5 9][ i = 2]

[ i = 2 ]比较4和6,不交换,只要不交换就自增1

交换前[2 4 6 1 5 9][ i = 2]

交换后[2 4 6 1 5 9][ i = 3]

[ i = 3 ]比较6和1,交换,只要交换就减1

交换前[2 4 6 1 5 9][ i = 3]

交换后[2 4 1 6 5 9][ i = 2]

[ i = 2 ]比较4和1,交换,只要交换就减1

交换前[2 4 1 6 5 9][ i = 2]

交换后[2 1 4 6 5 9][ i = 1]

[ i = 1 ]比较2和1,交换,只要交换就减1

交换前[2 1 4 6 5 9][ i = 1]

交换后[1 2 4 6 5 9][ i = 0]

[ i = 0 ]时啥也不干,先让i自增1,达到值为1才开始真正的比较

交换前[1 2 4 6 5 9][ i = 0]

交换后[1 2 4 6 5 9][ i = 1]

[ i = 1]比较1和2,不交换,只要不交换就自增1

[ i = 2]比较2和4,不交换,只要不交换就自增1

[ i = 3]比较4和6,不交换,只要不交换就自增1

[ i = 4]比较6和5,交换,只要交换就减1

交换前[1 2 4 6 5 9][ i = 4]

交换后[1 2 4 5 6 9][ i = 3]

[ i = 3]比较4和5,不交换,只要不交换就自增1

[ i = 4]比较5和6,不交换,只要不交换就自增1

[ i = 5]比较6和9,不交换,只要不交换就自增1

[ i = 6]表达式(i < n)不成立,排序结束,

顺序输出结果即可:[ 1 2 4 5 6 9]

以下代码仅供参考

        static void gnome_sort(int[] unsorted)
{
int i = 0;
while (i < unsorted.Length)
{
if (i == 0 || unsorted[i - 1] <= unsorted[i])
{
i++;
}
else
{
int tmp = unsorted[i];
unsorted[i] = unsorted[i - 1];
unsorted[i - 1] = tmp;
i--;
}
}
}

地精排序Gnome Sort的更多相关文章

  1. 数据结构杂谈(二)简单有趣的地精排序Gnome sort

    很早之前便听说过地精排序的名字,今天自己看来一下,发现这是一种非常简单而且有趣的排序算法. 为什么叫地精排序? 地精排序在2000年由Dr. Hamid Sarbazi-Azad 提出的时候被称作 s ...

  2. 地精排序(Gnome Sort) 算法

    gnome应该是最简单排序的排序算法吧!Gnome Sort,这是该算法的作者命名的,O(n*n)时间复杂度,O(1)空间复杂度,属于稳定的排序算法.算法的思想是每趟循环找到第一个逆序的元素,把它和在 ...

  3. python 字典排序 关于sort()、reversed()、sorted()

    一.Python的排序 1.reversed() 这个很好理解,reversed英文意思就是:adj. 颠倒的:相反的:(判决等)撤销的 print list(reversed(['dream','a ...

  4. 排序命令sort

    Unix和Linux自带的sort命令功能非常强大,其主要功能是对文本内容按不同的方法排序.它不仅可以按一个或多个字段排序,还可以合并文件.使用sort处理一些较大的文件时,可能处理速度会比较慢,但却 ...

  5. C++排序函数sort/qsort使用

    问题描述:        C++排序函数sort/qsort的使用 问题解决:           (1)sort函数使用   注:           sort函数,参数1为数组首地址,参数2是数组 ...

  6. [算法] 希尔排序 Shell Sort

    希尔排序(Shell Sort)是插入排序的一种,它是针对直接插入排序算法的改进.该方法又称缩小增量排序,因DL.Shell于1959年提出而得名. 希尔排序实质上是一种分组插入方法.它的基本思想是: ...

  7. C++ 排序函数 sort(),qsort()的使用方法

    想起来自己天天排序排序,冒泡啊,二分查找啊,结果在STL中就自带了排序函数sort,qsort,总算把自己解脱了~ 所以自己总结了一下,首先看sort函数见下表: 函数名 功能描写叙述 sort 对给 ...

  8. 经典排序算法 - 高速排序Quick sort

    经典排序算法 - 高速排序Quick sort 原理,通过一趟扫描将要排序的数据切割成独立的两部分,当中一部分的全部数据都比另外一部分的全部数据都要小,然后再按此方法对这两部分数据分别进行高速排序,整 ...

  9. 排序算法 - 选择排序(selection sort)

    选择排序(Selection sort)跟插入排序一样,也是O(n^2)的复杂度,这个排序方式也可以用我们的扑克牌来解释. 概念 桌面上有一堆牌,也是杂乱无章的,现在我们想将牌由小到大排序,如果使用选 ...

随机推荐

  1. 【转】MySQLroot用户忘记密码解决方案(安全模式,修改密码的三种方式)

    文章出自:http://www.2cto.com/database/201412/358128.html 1.关闭正在运行的MySQL2.启动MySQL的安全模式,命令如下: ? 1 mysqld - ...

  2. php常用方法汇总

    xml格式转成array <?php $str='<xml><node><![CDATA[content]]></node></xml> ...

  3. 【转】Angular.js VS. Ember.js:谁将成为Web开发的新宠?

    本文源自于Quora网站的一个问题,作者称最近一直在为一个新的Rails项目寻找一个JavaScript框架,通过筛选,最终纠结于 Angular.js和 Ember.js. 这个问题获得了大量的关注 ...

  4. 微信小程序:封装全局的promise异步调用方法

    微信小程序:封装全局的promise异步调用方法 一:封装 function POST(url, params) { let promise = new Promise(function (resol ...

  5. vue.js 创建组件 子父通信 父子通信 非父子通信

    1.创建组件 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UT ...

  6. Saruman's Army(贪心)

    Saruman the White must lead his army along a straight path from Isengard to Helm’s Deep. To keep tra ...

  7. lintcode-167-链表求和

    167-链表求和 你有两个用链表代表的整数,其中每个节点包含一个数字.数字存储按照在原来整数中相反的顺序,使得第一个数字位于链表的开头.写出一个函数将两个整数相加,用链表形式返回和. 样例 给出两个链 ...

  8. LintCode-381.螺旋矩阵 II

    螺旋矩阵 II 给你一个数n生成一个包含1-n^2的螺旋形矩阵 样例 n = 3 矩阵为 [     [ 1, 2, 3 ],     [ 8, 9, 4 ],     [ 7, 6, 5 ] ] 标 ...

  9. 【Asp.Net】IIS应用程序池添加ASP.NET v4.0

    可能在安装.NET Framewrok 4.0之前,IIS就已经装好了,结果在IIS的应用程序池中只有.NET 2.0的Classic .NET AppPool和DefaultAppPool.在使用v ...

  10. 【bzoj4580】[Usaco2016 Open]248 区间dp

    题目描述 Bessie likes downloading games to play on her cell phone, even though she does find the small t ...