桶排序

桶排序,计数排序,基数排序都不是基于比较的排序,也就是说他们与样本的实际数据情况有很大关系,实际中不经常使用,其时间复杂度都为O(N),额外空间复杂度都为O(N),而且都是稳定的排序

桶排序

  1. 桶排序就是一个概念,不是具体的一种排序方法,其中的**基数排序计数排序**才是桶排序的具体实现.
  2. 举例: 现在有一个数组arr,里面存放着从0-60的共计61个元素,我们可以拿一个同样长度为61的新数组countArr,用来记录arr数组中每个数字出现的次数,最后遍历数组countArr就可以知道每个数出现了几次,就从0开始输出几次就好了,比如说1出现了3次,就输出111就可以了.

计数排序

  1. 计数排序就是有多少个数对应放多少个桶,然后统计对应数出现的个数,最后遍历输出,不过这个很不实用,要是数据量太大了,就贼慢,所以一般桶的数量不会很多,就是这么个意思,理解理解就好了.

基数排序(后面再说)

补充问题

1. 案例(很重要): 给定一个无序数组,求如果排序之后,相邻两数的最大差值,要求时间复杂度为**O(N)**,且要求**不能用非基于比较**的排序.
	* 举例: 
		数组array:   [3,1,6,2,7]
		排序后:      [1,2,3,6,7]
		返回最大差值:      3
		则本题解为 :       3
	* 解法: 借用桶概念,但是没用桶排序
	![案例图解思路](https://github.com/fanfan999/MyPostImage/raw/master/%E6%A1%B6%E6%8E%92%E5%BA%8F/%E6%A1%88%E4%BE%8B%E8%A7%A3%E9%A2%98%E5%9B%BE%E8%A7%A3.jpg).
	* 代码: **[案例代码](https://github.com/fanfan999/AlgorithmsCodes/blob/master/SortingCodes/Max_Gap.java).**
2. 在这里要注意一个问题: 
	int i = 0;
	int j = 0;
    i = i++;
	此时的i是为0的.
	i = i + 1;
	j = ++j;
	此时i和j都是等于1的,一定要想清楚啊!!!
3. 用数组实现固定大小的栈,越界就报错: 实现添加功能`push`,取出栈顶元素但是不删除功能`peek`,取出栈顶元素并删除`pop`这三个功能
	* **[数组实现固定大小的栈代码](https://github.com/fanfan999/AlgorithmsCodes/blob/master/SortingCodes/MakeArrayAsStack.java).**
4. 用数组实现固定大小的队列,越界就报错: 实现添加功能`push`,取出队列首元素但是不删除功能`peek`,取出队列首元素并删除`poll`这三个功能
	* **[数组实现固定大小的队列代码](https://github.com/fanfan999/AlgorithmsCodes/blob/master/SortingCodes/MakeArrayAsQueue.java).**
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值