关于排序算法,常见的大致有:冒泡排序、插入排序、选择排序、快速排序、归并排序、桶排序、计数排序等。每一种排序算法都有它们各自的优劣和适用场景。一般可以从这么几个角度来衡量排序算法: 1.最好时间复杂度、最坏时间复杂度、平均时间复杂度 2.是否是原地排序算法:原地排序算法,指空间复杂度为O(1) 3. ...
分类:
编程语言 时间:
2019-07-09 09:40:28
阅读次数:
139
一、原理 桶排序是计数排序的升级版,如果计数排序中数的范围比较大呢?之前的计数排序数字范围是1-200,假如1-20000呢?利用桶排序就可以对其进行优化。 步骤: (1)将元素分在不同的桶中 (2)在对每一个桶中的元素进行排序 桶排序的的快慢取决于数据的分布: 当输入的数据可以均匀的分配到每一个桶 ...
分类:
编程语言 时间:
2019-06-30 17:15:51
阅读次数:
104
``` def bucketSort(nums): #选择一个最大的数 max_num = max(nums) # 创建一个元素全是0的列表, 当做桶 bucket = [0]*(max_num+1) # 把所有元素放入桶中, 即把对应元素个数加一 for i in nums: print(f"{b... ...
分类:
编程语言 时间:
2019-06-16 16:23:13
阅读次数:
157
快速选择 堆 1. Kth Element 桶排序 1. 出现频率最多的 k 个元素 2. 按照字符出现次数对字符串排序 荷兰国旗问题 1. 按颜色进行排序 1. Kth Element 1. 出现频率最多的 k 个元素 2. 按照字符出现次数对字符串排序 1. 按颜色进行排序 快速选择 用于求解 ...
分类:
编程语言 时间:
2019-06-12 14:00:07
阅读次数:
165
题目描述: 不使用比较排序,实现一个数组排序 时间复杂度O(N),额外空间复杂度O(N) 解题思路: 使用桶排序思维,申请一个额外数组,叫桶,用来记录数字出现的次数,然后输出即可,但桶排序一般适用于0-9的元素数字排序,因为此时桶只需申请0-9的空间,若array元素为999,则桶的空间至少得申请0 ...
分类:
编程语言 时间:
2019-06-07 13:04:08
阅读次数:
137
这里详细讲解了十大经典算法的分类,例如交换排序、插入排序、选择排序等比较类排序,以及计数排序、桶排序和基数排序的非比较类排序,分析了各种排序算法的复杂度和稳定性,还有JAVA代码的详细实现。对冒泡排序、插入排序、选择排序和堆排序等十种算法进行了详细的思想总结。
分类:
编程语言 时间:
2019-06-03 20:21:15
阅读次数:
125
题意 给定一个整形数组arr,返回排序后的相邻两数的最大差值。 题解 借助桶排序思想。 首先遍历一遍获得最大值max,最小值min。 设数组长度为len,则有len+1个桶,桶负责的区间大小是(max min)/len,数字num放入的桶id是(num min)/((max min)/len)即(n ...
分类:
编程语言 时间:
2019-05-30 01:43:01
阅读次数:
102
1、基数排序算法的简单介绍 关于基数排序算法的介绍有很多资料可以通过很多途径获取。基数排序(radix sort)又称桶排序(bucket sort),相对于常见的比较排序,基数排序是一种分配式排序,即通过将所有数字分配到应在的位置最后再覆盖到原数组完成排序的过程。 基数排序算法: 是一种非比较方法 ...
分类:
编程语言 时间:
2019-05-27 13:50:38
阅读次数:
175
截止到上篇随笔,我们已经学完了c++中所有的基础语句,这意味着,noip普及组的第一题你已经可以拿满分了。为了纪念这个伟大的时刻,今天要上的这道题,是刚刚考完的海淀区区赛第一题。 这道题比较复杂,我当时大概花了半小时做这道题,稍后我会详细讲解。 今天我们终于可以进入算法部分。我们来讲讲一种非常实用的 ...
分类:
编程语言 时间:
2019-05-04 11:44:30
阅读次数:
163
【基本思想】 计数排序类似与桶排序,也是用空间换取了时间,计数排序要求数组必须在一个确定的区间内。 过程:1. 首先找出数组的最大值和最小值;2. 遍历数组,以数字作为键,该数字出现的次数作为值插入哈希表中;3. 在最小值到最大值这个区间内遍历哈希表,将数字反向插入数组中。 【算法复杂度】 计数排序 ...
分类:
编程语言 时间:
2019-05-03 18:21:08
阅读次数:
161