漫画:三种 “奇葩” 的排序算法

简介: 介绍三种“异想天开”的排序算法。


在算法的世界里,有许多高效率的排序算法,比如快速排序、归并排序、桶排序......它们大大提高了程序的性能。

但是,也有一些比较奇葩的排序算法,它们既不能做到高效率,也没有很好的可读性。那它们存在的意义是什么呢?因为有趣呀。

下面,让我们来介绍三种“异想天开”的排序算法。



1.睡眠排序


640.jpg640.jpg

—————  第二天  —————


640.jpg640.jpg640.jpg640.jpg

public
static
void
 sleepSort
(
int
[]
 array
){
for
(
int
 num 
:
 array
)
{
new
Thread
(()
->
{
try
{
Thread
.
sleep
(
num
);
}
catch
(
InterruptedException
 e
)
{
                e
.
printStackTrace
();
}
System
.
out
.
println
(
num
);
}).
start
();
}
}
public
static
void
 main
(
String
[]
 args
)
{
int
[]
 array 
=
{
10
,
30
,
50
,
60
,
100
,
40
,
150
,
200
,
70
};
    sleepSort
(
array
);
}

640.jpg640.jpg640.png640.jpg640.png640.jpg640.jpg640.jpg(小灰把自己的代码给大黄展示了)640.jpg640.jpg640.jpg640.jpg640.jpg640.jpg640.jpg640.jpg640.jpg


2.猴子排序


image.gif


640.jpg640.jpg640.jpgimage.gifimage.gif


或许这样说比较抽象,让我们来演示一下:

image.gif


640.png640.jpg640.jpg

image.gif

3.珠排序


image.gif


640.jpg640.jpg640.jpgimage.gif

见过算盘的人都知道,算盘上有许多圆圆的珠子被串在细杆上,就像下面这样:

640.png

如果把算盘竖起来,会发生什么呢?算盘上的小珠子会在重力的作用下滑到算盘底部,就像下面这样:


image.gif640.png640.jpg640.jpgimage.gif

什么意思呢?我们来仔细说明一下:


image.gif640.png

在珠子下落之前,每一横排有几个珠子?如上图所示,每排珠子的数量分别是3, 2, 4, 5, 1,这个数列是无序的。

image.gif

640.png

当珠子下落以后,每一横排有又几个珠子?如上图所示,每排珠子的数量变成了1, 2, 3, 4, 5,这个数列是有序的!

那么,我们可不可以模拟珠子下落的原理,对一组正整数进行排序呢?答案是可以的。

我们可以用二维数组来模拟算盘,有珠子的位置设为1,没有珠子的位置设为0。那么,一个无序的整型数组就可以转化成下面的二维数组:

640.png

接下来,我们模拟算盘珠子掉落的过程,让所有的元素1都落到二维数组的最底部:


image.gif640.png

最后,把掉落后的 “算盘” 转化成一维有序数组:

640.png640.jpg640.jpg640.jpg


相关文章
|
12月前
|
人工智能 算法 C++
【每日算法Day 88】超越妹妹教你如何做这道排序题
【每日算法Day 88】超越妹妹教你如何做这道排序题
|
12月前
|
算法 C++ Python
【每日算法Day 107】面试必考:良心推荐,一题三解,不看后悔一辈子
【每日算法Day 107】面试必考:良心推荐,一题三解,不看后悔一辈子
|
算法 搜索推荐
【算法实践】有始有终,雨露均沾--手把手带你手撸选择排序
选择排序是一个非常经典且简单直观的排序算法,无论什么数据进去都是 O(n^2) 的时间复杂度。所以用到它的时候,数据规模越小越好。唯一的好处可能就是不占用额外的内存空间。其排序时,元素交换次数最差的情况为n−1次。选择排序的原理是先固定每个元素的位置,在序列中找到最小的元素,将这个元素与第一个元素交换位置,其次是除去第一个元素,找到剩余序列中最小的元素,与第二个元素交换位置,以此类推,直到所有的元素排完,就能实现选择排序,所以说选择排序是有始有终,雨露均沾的一个算法,哈哈~ 选择排序的基本思想是:每一趟在n−i+1 ( i = 1 , 2 , . . . , n − 1 ) 个元素中选择最小的
93 0
|
算法 开发者
再学一道算法题:水果忍者
再学一道算法题:水果忍者
再学一道算法题:水果忍者
算法刷题第五天(跑路人笔记)<双指针>
算法刷题第五天(跑路人笔记)<双指针>
算法刷题第五天(跑路人笔记)<双指针>
|
搜索推荐 算法
齐姐漫画:排序算法(一)
借用《算法导论》里的例子,就是我们打牌的时候,每新拿一张牌都会把它按顺序插入,这,其实就是插入排序。
125 0
齐姐漫画:排序算法(一)
|
存储 人工智能 搜索推荐
重温前端10大排序算法(长文建议收藏)
本文主要讲前端10大排序算法
119 0
|
存储 缓存 搜索推荐
漫画:“排序算法” 大总结
冒泡排序: 漫画:什么是冒泡排序? 选择排序: 漫画:什么是选择排序? 插入排序: 漫画:什么是插入排序? 此外还有冒泡排序的变种,鸡尾酒排序: 漫画:什么是鸡尾酒排序?
138 0
漫画:“排序算法” 大总结
|
存储 算法
漫画:什么是归并排序?
举个例子,有A、B、C、D、E、F、G、H一共8个武术家参考参加比武大会。 第一轮,两两一组,有4名选手胜出(四分之一决赛) 第二轮,两两一组,有两名选手胜出(半决赛) 第三轮,仅剩的两人一组,冠军胜出(总决赛)
漫画:什么是归并排序?
|
算法 搜索推荐
漫画:什么是基数排序?
数组每一个下标位置的值,代表了数列中对应整数出现的次数。 有了这个“统计结果”,排序就很简单了。直接遍历数组,输出数组元素的下标值,元素的值是几,就输出几次: 0,1,1,2,3,3,3,4,4,5,5,6,7,7,8,9,9,9,9,10 显然,这个输出的数列已经是有序的了。 这就是计数排序的朴素版本。
120 0
漫画:什么是基数排序?