地精排序Gnome Sort
号称最简单的排序算法,只有一层循环,默认情况下前进冒泡,一旦遇到冒泡的情况发生就往回冒,直到把这个数字放好为止
直接看它排序的过程,待排数组[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的更多相关文章
- 数据结构杂谈(二)简单有趣的地精排序Gnome sort
很早之前便听说过地精排序的名字,今天自己看来一下,发现这是一种非常简单而且有趣的排序算法. 为什么叫地精排序? 地精排序在2000年由Dr. Hamid Sarbazi-Azad 提出的时候被称作 s ...
- 地精排序(Gnome Sort) 算法
gnome应该是最简单排序的排序算法吧!Gnome Sort,这是该算法的作者命名的,O(n*n)时间复杂度,O(1)空间复杂度,属于稳定的排序算法.算法的思想是每趟循环找到第一个逆序的元素,把它和在 ...
- python 字典排序 关于sort()、reversed()、sorted()
一.Python的排序 1.reversed() 这个很好理解,reversed英文意思就是:adj. 颠倒的:相反的:(判决等)撤销的 print list(reversed(['dream','a ...
- 排序命令sort
Unix和Linux自带的sort命令功能非常强大,其主要功能是对文本内容按不同的方法排序.它不仅可以按一个或多个字段排序,还可以合并文件.使用sort处理一些较大的文件时,可能处理速度会比较慢,但却 ...
- C++排序函数sort/qsort使用
问题描述: C++排序函数sort/qsort的使用 问题解决: (1)sort函数使用 注: sort函数,参数1为数组首地址,参数2是数组 ...
- [算法] 希尔排序 Shell Sort
希尔排序(Shell Sort)是插入排序的一种,它是针对直接插入排序算法的改进.该方法又称缩小增量排序,因DL.Shell于1959年提出而得名. 希尔排序实质上是一种分组插入方法.它的基本思想是: ...
- C++ 排序函数 sort(),qsort()的使用方法
想起来自己天天排序排序,冒泡啊,二分查找啊,结果在STL中就自带了排序函数sort,qsort,总算把自己解脱了~ 所以自己总结了一下,首先看sort函数见下表: 函数名 功能描写叙述 sort 对给 ...
- 经典排序算法 - 高速排序Quick sort
经典排序算法 - 高速排序Quick sort 原理,通过一趟扫描将要排序的数据切割成独立的两部分,当中一部分的全部数据都比另外一部分的全部数据都要小,然后再按此方法对这两部分数据分别进行高速排序,整 ...
- 排序算法 - 选择排序(selection sort)
选择排序(Selection sort)跟插入排序一样,也是O(n^2)的复杂度,这个排序方式也可以用我们的扑克牌来解释. 概念 桌面上有一堆牌,也是杂乱无章的,现在我们想将牌由小到大排序,如果使用选 ...
随机推荐
- Sum of Consecutive Prime Numbers(素数打表+尺取)
Description Some positive integers can be represented by a sum of one or more consecutive prime numb ...
- c# 四则运算出错
不同类型值之间不可直接相减,long和short得出的差继续参与运算出错. 有待深究.
- C#操作Excel执行分类多条件汇总合并
之前发了一片模拟合并,详见模拟Excel同一列相同值的单元格合并 在之前的文章中介绍了思想,其中Excel采用的二维数组模拟,今天花了点时间,学习了一下C#操作Excel,实现了类似的效果! 准备 需 ...
- Css入门课程 Css文本样式
文字是网页的非常基础的内容,文本的样式设置也是非常重要的 1 字体大小 font-size:绝对大小单位和相对大小单位,绝对大小单位有cm,mm in(厘米,毫米,英寸)等,这是大小不随屏幕分辨率大小 ...
- linux解压zip
用 unzip 的先安装 yum install -y unzip #unzip file.zip -d /root -d指解压路径 ,不写的话默认当前目录
- linux 相关的问题
1,查找当前目录下的文件名,并重定向到文件t中 ls > t mac 下快速补全目录名快捷键tab
- Maven 生命周期 和插件
1.3 生命周期1.3.1 什么是生命周期? Maven生命周期就是为了对所有的构建过程进行抽象和统一.包括项目清理.初始化.编译.打包.测试.部署等几乎所有构建步骤. 生命周期可以理解为构建工程的步 ...
- JQuery 学习笔记--02
JS 中的 window.onload() 方法与 Jquery 中的 $(document).read(function( ){ }) 的区别 : 加载时机不一样, window.onload() ...
- android eclipse 添加libs文件夹
导入一个项目发现没有libs文件夹,后来z自己新建了个lib文件夹,但是总是不行,后来发现错了,应该是libs文件夹.建完了之后,系统会自动在build path中把这个文件夹添加进来的:个人无须操作
- Delphi 自定义窗体(最大化、最小化、关闭、窗体的移动)
Uses ShellAPI; 1.//最小化procedure TForm1.btn1Click(Sender: TObject);var I, J, X, Y: Word;begin //第一种 ...