目录
马桶排序(令人作呕的排序)一、场景:期末考试完了,老师要将同学们的分数从高到低排序。假设班上有 5 名同学,分别考了 5 分、3 分、5 分、2 分和 8 分【满分:10 分】,排序后的结果就是 8 5 5 3 2,现在,让我们先思考 10 分钟吧!
二、思路: (1)先创建一个数组 int scores[11],就有 scores[0]~scores[10] 共 11 个变量。我们用变量值为 0 表示没有人得到该分数,即 scores [0]=0 表示没有人得 0 分,scores [10]=0 表示没有人得 10 分,而 scores [8]=1 表示有一个人得到 8 分。
(2)第 1 个数为 5,所以在 scores[5]=0 的基础上 1,即 scores[5]=1 表示有 1 人得到 5 分
(3)第 2 个数为 3,所以在 scores[3]=0 的基础上 1,即 scores[3]=1 表示有 1 人得到 3 分
(4)第 3 个数为 5,所以在 scores[5]=1 的基础上 1,即 scores[5]=2 表示有 2 人得到 5 分
... ... (5)依此类推,处理第 4 和第 5 个数,最终的结果图如下:
(6)我们发现,scores[0]~scores[10] 内对应的值就是 0~10 分中每个分数所出现的次数。现在,只需将结果打印即可,出现几次就打印机次。 我们暂且称它为“马桶排序”,这个算法就相当于有 11 个马桶,编号从 0~10。每出现一个数,就在对应编号的马桶中放一个旗子。
图:这里有 11 个马桶 三、思考:现在分别有 5 个人的名字和分数:小A 5、小二 3、小三 5、小妞2 和王大锤 8,请按照分数从高到低,输出他们的名字? 【特点】 假设需要排序的范围 0~20000000,则需要 new int[20000001],非常浪费空间,即便只给 2 个数排序(1,19999999 ); 如果排序的数是小数也不行,如:3.141 5926 5358 9793 2384 6264 3383 2795 0238; 这里使用 C# 给出简单的算法过程。
|
|
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系
[邮箱地址] 删除
|