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

直接看它排序的过程,待排数组[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. The Uncle_b's First Love

    Description ACM成立大会之后,uncle_b被其中一个大一女孩深深地吸引,但腼腆的B叔又不知道如何去表达自己内心的想法,经calmound神的指导,B叔决定写封情书给对方.他从Tamar ...

  2. C#命名参数

    文章:史上最全的ASP.NET MVC路由配置,以后RouteConfig再弄不懂神仙都难救你啦~ 命名参数规范+匿名对象 routes.MapRoute(name: "Default&qu ...

  3. 大型网站架构演化(六)——使用反向代理和CDN加速网站响应

    随着网站业务不断发展,用户规模越来越大,由于中国复杂的网络环境,不同地区的用户访问网站时,速度差别也极大.有研究表明,网站访问延迟和用户流失率正相关,网站访问越慢,用户越容易失去耐心而离开.为了提供更 ...

  4. 简单名称值对节点类NameValuePair

    本类位于System.Data.dll中,名为:System.Data.Common.NameValuePair.主要用途是在DBConnectionString类中,解析ConnectionStri ...

  5. matplotlib中什么是后端

    在很多网上文档和邮件列表中提到了"后端",并且很多初学者会对这个术语迷惑.matplotlib把不同使用情形和输出格式作为目标.一些人用matplotlib在python shel ...

  6. 【python】Python 之 __new__() 方法与实例化

    本文转自:http://www.cnblogs.com/ifantastic/p/3175735.html __new__() 是在新式类中新出现的方法,它作用在构造方法建造实例之前,可以这么理解,在 ...

  7. 安装FastDFS+Nginx

    安装FastDFS FastDFS开发者的GitHub地址为:https://github.com/happyfish100 打开上述链接,我们点击fastdfs–>release,发现最新版的 ...

  8. CentOS 文本搜索grep

    grep 用于在文本中执行关键词搜索, 用法: grep [选项]... PATTERN [FILE]... [root@bigdata-senior01 ~]# grep "ftp&quo ...

  9. [HDU4532]湫秋系列故事——安排座位

    题面在这里 description 有\(n\)种颜色的小球,每种颜色的小球有\(a_i\)个: 要把它们摆成一排,求相邻小球颜色不相同的摆放方案数. 任意两个合理的安排方法,只要有一个位置的同学不同 ...

  10. POJ1061:青蛙的约会——题解

    http://poj.org/problem?id=1061 Description 两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面.它们很高兴地发现它们住在同一条纬度线上,于是它们约定 ...