伪代码

function gnomeSort(a[0..size-1])i := 1j := 2while i < size doif a[i-1] <= a[i] then// for descending sort, use >= for comparisoni := jj := j + 1 elseswap a[i-1] and a[i]i := i - 1if i = 0 theni := jj := j + 1endifendifdone

ActionScript

function gnomeSort(array:Array)
{var pos:uint = 0;while(pos < array.length){if(pos == 0 || array[pos] >= array[pos-1])pos++;else{var tmp = array[pos];array[pos] = array[pos-1];array[pos-1] = tmp;pos--;}}return array;
}

C

void gnome_sort(int *a, int n)
{int i=1, j=2, t;
# define swap(i, j) { t = a[i]; a[i] = a[j]; a[j] = t; } while(i < n) {if (a[i - 1] > a[i]) {swap(i - 1, i);if (--i) continue;}i = j++;}
# undef swap
}

C++

#include <algorithm>
#include <iterator>
#include <iostream>template<typename RandomAccessIterator>
void gnome_sort(RandomAccessIterator begin, RandomAccessIterator end) {auto i = begin + 1;auto j = begin + 2;while (i < end) {if (!(*i < *(i - 1))) {i = j;++j;} else {std::iter_swap(i - 1, i);--i;if (i == begin) {i = j;++j;}}}
}int main() {int a[] = {100, 2, 56, 200, -52, 3, 99, 33, 177, -199};gnome_sort(std::begin(a), std::end(a));copy(std::begin(a), std::end(a), std::ostream_iterator<int>(std::cout, " "));std::cout << "\n";
}

C#

public static void gnomeSort(int[] anArray)
{int first = 1;int second = 2;while (first < anArray.Length){if (anArray[first - 1] <= anArray[first]){first = second;second++;}else{int tmp = anArray[first - 1];anArray[first - 1] = anArray[first];anArray[first] = tmp;first -= 1;if (first == 0){first = 1;second = 2;}}}
}

Go

package mainimport "fmt"func main() {a := []int{170, 45, 75, -90, -802, 24, 2, 66}fmt.Println("before:", a)gnomeSort(a)fmt.Println("after: ", a)
}func gnomeSort(a []int) {for i, j := 1, 2; i < len(a); {if a[i-1] > a[i] {a[i-1], a[i] = a[i], a[i-1]i--if i > 0 {continue}}i = jj++}
}

Java

public static void gnomeSort(int[] a)
{int i=1;int j=2;while(i < a.length) {if ( a[i-1] <= a[i] ) {i = j; j++;} else {int tmp = a[i-1];a[i-1] = a[i];a[i--] = tmp;i = (i==0) ? j++ : i;}}
}

JavaScript

function gnomeSort(a) {function moveBack(i) {for( ; i > 0 && a[i-1] > a[i]; i--) {var t = a[i];a[i] = a[i-1];a[i-1] = t;}}for (var i = 1; i < a.length; i++) {if (a[i-1] > a[i]) moveBack(i);}return a;
}

Kotlin

// version 1.1.0fun <T: Comparable<T>> gnomeSort(a: Array<T>, ascending: Boolean = true) {var i = 1var j = 2while (i < a.size) if (ascending && (a[i - 1] <= a[i]) ||!ascending && (a[i - 1] >= a[i]))i = j++else {val temp = a[i - 1]a[i - 1] = a[i]a[i--] = tempif (i == 0) i = j++}
} fun main(args: Array<String>) {val array = arrayOf(100, 2, 56, 200, -52, 3, 99, 33, 177, -199)println("Original      : ${array.asList()}")gnomeSort(array)println("Sorted (asc)  : ${array.asList()}")gnomeSort(array, false)println("Sorted (desc) : ${array.asList()}")
}

Perl 6

sub gnome_sort (@a) {my ($i, $j) = 1, 2;while $i < @a {if @a[$i - 1] <= @a[$i] {($i, $j) = $j, $j + 1;}else {(@a[$i - 1], @a[$i]) = @a[$i], @a[$i - 1];$i--;($i, $j) = $j, $j + 1 if $i == 0;}}
}

PHP

function gnomeSort($arr){$i = 1;$j = 2;while($i < count($arr)){if ($arr[$i-1] <= $arr[$i]){$i = $j;$j++;}else{list($arr[$i],$arr[$i-1]) = array($arr[$i-1],$arr[$i]);$i--;if($i == 0){$i = $j;$j++;}}}return $arr;
}
$arr = array(3,1,6,2,9,4,7,8,5);
echo implode(',',gnomeSort($arr));

PowerShell

function gnomesort($a) {   $size, $i, $j = $a.Count, 1, 2while($i -lt $size) {if ($a[$i-1] -le $a[$i]) {$i = $j$j++}else {$a[$i-1], $a[$i] = $a[$i], $a[$i-1]$i--if($i -eq 0) {$i = $j$j++}}}$a
}
$array = @(60, 21, 19, 36, 63, 8, 100, 80, 3, 87, 11)
"$(gnomesort $array)"

Python

>>> def gnomesort(a):i,j,size = 1,2,len(a)while i < size:if a[i-1] <= a[i]:i,j = j, j+1else:a[i-1],a[i] = a[i],a[i-1]i -= 1if i == 0:i,j = j, j+1return a>>> gnomesort([3,4,2,5,1,6])
[1, 2, 3, 4, 5, 6]
>>>

Ruby

class Arraydef gnomesort!i, j = 1, 2while i < lengthif self[i-1] <= self[i]i, j = j, j+1elseself[i-1], self[i] = self[i], self[i-1]i -= 1if i == 0i, j = j, j+1endendendselfend
end
ary = [7,6,5,9,8,4,3,1,2,0]
ary.gnomesort!
# => [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

更多代码,持续更新!
整理自网络。

排序算法——侏儒排序(Gnome sort)【代码实现】相关推荐

  1. 经典排序算法 - 鸡尾酒排序Cocktail sort

    经典排序算法 - 鸡尾酒排序Cocktail sort 鸡尾酒排序基于冒泡排序,双向循环 还是看例子吧,给定待排数组[2 3 4 5 1] 第一趟过去时的每一步 第一步迭代,2 < 3不换 [2 ...

  2. 十大经典排序算法详细总结 图形展示 代码示例

    文章目录 十大经典排序算法详细总结 0.排序算法说明 1.冒泡排序(Bubble Sort) 2.选择排序(Selection Sort) 3.插入排序(Insertion Sort) 4.希尔排序( ...

  3. php排序算法算法,PHP排序算法之基数排序(Radix Sort)实例详解

    本文实例讲述了PHP排序算法之基数排序(Radix Sort).分享给大家供大家参考,具体如下: 基数排序在<大话数据结构>中并未讲到,但是为了凑齐八大排序算法,我自己通过网络学习了这个排 ...

  4. 经典排序算法 - 希尔排序Shell sort

    经典排序算法 - 希尔排序Shell sort 希尔排序Shell Sort是基于插入排序的一种改进,同样分成两部分, 第一部分,希尔排序介绍 第二部分,如何选取关键字,选取关键字是希尔排序的关键 第 ...

  5. 排序算法,最全的10大排序算法详解(Sort Algorithm)

    文章目录 排序算法,最全的10大排序算法详解(Sort Algorithm) 排序算法分类 排序算法稳定性 时间复杂度(time complexity) 1#时间复杂度的意义 2#基本操作执行次数 如 ...

  6. Java排序算法——插入排序(Insertion Sort)

    之前总结了交换排序的冒泡排序与选择排序的简单选择排序,这次我们来看看插入排序的简单插入排序~ 往期传送门: 冒泡排序: Java排序算法--冒泡排序(Bubble Sort)https://blog. ...

  7. php编写冒泡排序算法_PHP排序算法之冒泡排序(Bubble Sort)实现方法详解

    本文实例讲述了PHP排序算法之冒泡排序(Bubble Sort)实现方法.分享给大家供大家参考,具体如下: 基本思想: 冒泡排序是一种交换排序,它的基本思想是:两两比较相邻记录的关键字,如果反序则交换 ...

  8. python排序算法——希尔排序(附代码)

    python排序算法--希尔排序 文章目录 python排序算法--希尔排序 一.前言 二.算法描述 三.代码实现 总结 一.前言 相关知识来自<python算法设计与分析>.初级排序算法 ...

  9. 排序算法猴子排序java算法代码实现

    <h1>猴子排序</h1> 原理:现有一组未排序数据和相同数量的方格,然后依次随机地取出数据随机地放入方格中,直到把方格放满即止. 之所以又被称为猴子排序,我的猜测是因为.将这 ...

最新文章

  1. 什么?欧洲也有个恩智浦杯?
  2. 计算机行业中的烧写怎么翻译,单片机怎么烧录程序_单片机烧录程序步骤说明...
  3. 【转】错误: ORA-01591: 锁被未决分布式事务处理 7.2.428982 持有--解决方案
  4. 1027:输出浮点数
  5. linux系统引导分区,揭秘Linux(二)——操作系统引导与硬盘分区
  6. python项目构建工具zc.buildout
  7. 不怕!在家也能过好情人节 ——用数学浪漫表白的N种方法
  8. 代码简洁(注意事项)
  9. java 实例 登录用户 equals的用法
  10. unity text不能刷新_unity自走棋制作(二)-UI制作
  11. 【英语学习】【Daily English】U14 Transportation L01There will be a car exhibition next month
  12. 递归法:财务金额漏掉1笔或者几笔(排列组合)
  13. java事件处理的题目_介绍一下java的事件机制
  14. 关于数学建模竞赛经历
  15. 微信公众号跳转微信小程序,自定义微信跳转标签
  16. 甲骨文公司老板埃里森在耶如大学的…
  17. 第四周项目三计算并联电阻
  18. 计算机用户删除怎么找回,电脑不小心删除的数据怎么找回
  19. 本文出自沉默王二的博客,转载必须注明出处。技术交流群 120926808
  20. Python中怎么解决GIL锁与深浅拷贝问题【详细】

热门文章

  1. Java设计模式的一些积累
  2. 教你免费使用百度云GPU算力提交深度学习任务
  3. 微信小程序 控制台报错net::ERR_UNSAFE_PORT
  4. 南邮 OJ 1128 An Industrial Spy
  5. Unity 回合制战斗
  6. 因为计算机丢失user32.dll,Win7系统出现无法定位动态链接库user32.dll错误提示解决方法...
  7. python人工智能方向面试准备_关于机器学习面试的经典题目(面试经验和建议)...
  8. 柏力纪德:网店开店之后怎么运营
  9. MybatisPlus实现多条件拼接动态查询
  10. Vue:Array变化侦测