文章目录[隐藏]
地精排序(Gnome 排序)和插入排序类似,除了移动一个元素到最终的位置,是通过交换一系列的元素实现,号称最简单的排序算法,只有一层循环,就像冒泡排序一样,一旦遇到冒泡的情况发生就往回冒,直到把这个数字放好为止。
这个算法可以看作是冒泡排序的简化版。冒泡排序的思想是不断交换反序对,使得最大的元素浮出水面,而地精排序在发现反序对时,把它往回按,直到排好序,再向前继续走。
地精排序最著名的特点是代码只有一层循环,在「大部分元素有序」的情况下,可以减少排序回合数
起初由 Hamid Sarbazi-Azad 于 2000 年提出,并被称为 stupid 排序,后来被 Dick Grune 描述并命名为 “地精排序” ,
Here is how a garden gnome sorts a line of flower pots. Basically, he looks at the flower pot next to him and the previous one; if they are in the right order he steps one pot forward, otherwise he swaps them and steps one pot backwards. Boundary conditions: if there is no previous pot, he steps forwards; if there is no pot next to him, he is done.
—Dick Grune
属于稳定的排序算法。算法的思想是每趟循环找到第一个逆序的元素,把它和在它前面的已排序的元素逐个进行比较、交换,有点像插入排序。
易语言地精排序
.版本 2
.子程序 Gnome排序
.参数 array, 整数型, 数组
.局部变量 m, 整数型
.局部变量 t, 整数型
.局部变量 temp, 整数型
.局部变量 l, 整数型
t = 取数组成员数 (参数组)
.如果真 (t ≤ 0)
返回 ()
.如果真结束
l = -1
.判断循环首 (m ≤ t)
.如果 (m > 1 且 temp < 参数组 [m - 1])
.如果真 (l = -1)
l = m
.如果真结束
参数组 [m] = 参数组 [m - 1]
m = m - 1
.否则
.如果 (l = -1)
m = m + 1
.否则
参数组 [m] = temp
m = l + 1
l = -1
.如果结束
.如果 (m ≤ t)
temp = 参数组 [m]
.否则
.如果结束
.如果结束
.判断循环尾 ()