基数排序(radix sort): 对个位数先排序,再对十位数排序,以此类推。。 如果数据不满足位数相同,要对不够位数的数字前面补0(或者做类似处理)。 时间复杂度O(nk)其中n为数字个数,k为最多的数字位数。 void RadixSort(vector<int>& nums){ int maxD ...
分类:
编程语言 时间:
2020-05-14 09:13:43
阅读次数:
87
适用场景:量大但是范围小 package com.example.sort.count; import java.util.Arrays; public class CountSort { public static void main(String[] args) { int[] arr = {2 ...
分类:
编程语言 时间:
2020-05-08 12:39:17
阅读次数:
58
import java.util.Arrays;/** * 基数排序 * <p> * 数据非负、且是十进制数 */public class RadixSort { public static void main(String[] args) { // 测试次数 int times = 50000; ...
分类:
编程语言 时间:
2020-05-03 23:04:30
阅读次数:
65
排序算法 一、算法核心思想分类 根据算法的核心思想,可以将十大排序算法分为两类: 1. 比较排序 常见的快速排序、归并排序、堆排序、冒泡排序等属于比较排序。 在排序的最终结果里,元素之间的次序依赖于它们之间的比较。每个数都必须和其他数进行比较,才能确定自己的位置。 2. 非比较排序 计数排序、基数排 ...
分类:
编程语言 时间:
2020-05-02 18:50:31
阅读次数:
93
要点:利用空间换时间,有桶排序的思想,按照基数规则转换,使空间开销较小,但理解起来比计数排序复杂的多。 1 import java.util.Random; 2 3 public class RadixSort { 4 5 public void sort(int arr[]) { 6 int ma ...
分类:
编程语言 时间:
2020-04-30 17:21:29
阅读次数:
68
对于给定的n个d位数,取值范围为[0,k],我们使用计数排序比较元素的每一位,基数排序耗时Θ(n+k),那么基数排序的复杂度为Θ(d(n+k))。 ...
分类:
编程语言 时间:
2020-04-24 13:08:25
阅读次数:
59
桶排序是计数排序的升级版。它利用了函数的映射关系,高效与否的关键就在于这个映射函数的确定。为了使桶排序更加高效,我们需要做到这两点: 1.在额外空间充足的情况下,尽量增大桶的数量 2.使用的映射函数能够将输入的 N 个数据均匀的分配到 K 个桶中 图解 代码实现 效率分析 1. 什么时候最快 当输入 ...
分类:
编程语言 时间:
2020-04-23 11:52:34
阅读次数:
61
插入排序 直接插入排序,折半插入排序,2-路插入排序,希尔排序 快速排序 冒泡排序,快速排序(冒泡排序改进), 选择排序 简单选择排序,树形选择排序,堆排序 归并排序 基数排序 ...
分类:
编程语言 时间:
2020-04-20 13:41:41
阅读次数:
63
基数排序(桶排序): 设置若干个箱子,将关键字为k的记录放入第k个箱子中,然后按序号将非空的连接。而数字是有范围的,若待排元素均由0-9这十个数字组成,则只需设置十个箱子,相继按个、十、百...进行排序 平均,最坏时间复杂度 O(k*(n+m)) k是关键字的个数,如个位、十位分别就是关键字;n是元 ...
分类:
编程语言 时间:
2020-04-19 14:52:31
阅读次数:
55
public void countingsort(int[] array, int[] b, int k) { //创建数组c int[] c = new int[k+1]; for(int i=0;i<c.length;i++) { c[i] = 0; } //统计数组array中每个元素出现的次 ...
分类:
编程语言 时间:
2020-04-18 13:38:32
阅读次数:
56