说起排序大家都不陌生,日常生活中大家可能会面对各种各样的被排序。考试的时候按成绩从高到低排序,吃自助的时候大家按来的时间顺序从早到晚排序。可以说排序是无时无刻不存在的。生活不易,且行且珍惜。
求学10多年,你还记得被成绩支配的恐惧吗?哇~想想都难受。那就给你份不难受的差事吧,给别人排成绩。是不是美滋滋,哈哈。听好任务
你们班里有5个同学,这5个同学分别考了:3分,5分,1分,8分,3分。哇比我还菜,你敢相信?咳咳,给你自信了。对了这是10分制的。给你个任务把这5个同学的成绩从高到低排序吧,最终得到的是8,5,3,3,1。别口算哈,我也能口算出来,试着用程序写出来哈哈。
机智的宝宝你想到了吗,我们只需要一个一维数组就可以解决这个问题。what?以为数组就能解决?没错,我们来分析一下。
首先我们来申请一个大小为11的数组 int arr[11]。好了我们已经有了11个变量,我们把他们(0-10)全都初始化为0。也就是这些分数还没有人得过。例如arr[0] = 0;就表示目前没有人得到过0分以此类推 arr[10]=0;就表示目前没有人得到过10分。天了噜,我好像明白你在讲些什么东西了。我们来用这个思路分析一下问题。首先是3分,也就是arr[3]在原来的基础上+1变成了1;然后是5分,arr[5]在原来的基础上+1变成了1;接下来是1分,arr[1]在原来的基础上+1变成了1;随后是8分,arr[8]在原来的基础上+1变成了1,最后还是3分,arr[3]在原来的基础上+1变成了2。最终的结果是打印>0的数组下标,值是几就打印几遍。比如我们刚刚的任务要打印的是:1个1,2个3,1个5和1个8。
代码呈上
大家不要像我一样类名用中文哦,别问为什么,规范哈哈。
其实这并不是严格意义上的桶排序,之后我们再探讨。
咳咳。最后就让朕做一个补充吧:
桶排序的时间复杂度:O(M+N)
桶排序的优点:
1.桶排序是稳定的
2.大多数情况下,桶排序是常见排序里最快的一种,比快速排序还快。
桶排序的缺点:
1.非常非常非常浪费内存空间,此话怎讲?你的分数是10分制你就要申请11个内存 空间,100,1000,10000分呢?
2.排序的数据只能在正数范围内,比较局限哈哈。人无完人,算法也不是完美的。