算法导论读书笔记(8)

目录

  • 计数排序

    • 计数排序的简单Java实现
  • 基数排序
    • 基数排序的简单Java实现
  • 桶排序

计数排序

计数排序 假设 n 个输入元素中的每一个都是介于0到 k 之间的整数,此处 k 为某个整数。当 k = O ( n )时,计数排序的运行时间为 Θ ( n )。

计数排序的基本思想就是对每一个输入元素 x ,确定出小于 x 的元素个数。有了这一信息,就可以把 x 直接放到它在最终输出数组上的位置上。

COUNTING-SORT(A, B, k)
1  let C[0 .. k] be a new array
2  for i = 0 to k
3      C[i] = 0
4  for j = 1 to A.length
5      C[A[j]] = C[A[j]] + 1
6  // C[i] now contains the number of elements equal to i.
7  for i = 1 to k
8      C[i] = C[i] + C[i - 1]
9  // C[i] now contains the number of elements less than or equal to i.
10 for j = A.length downto 1
11     B[C[A[j]]] = A[j]
12     C[A[j]] = C[A[j]] - 1

计数排序的一个重要性质是它是稳定的:具有相同值得元素在输出数组中的相对次序与它们在输入数组中的次序相同。而且,计数排序经常作为基数排序算法的一个子程序。

计数排序的简单Java实现

/**
 * 计数排序
 */
public static int[] countingSort(int[] array, int k) {int[] result = new int[array.length];int[] temp = new int[k];for (int i = 0; i < k; i++)temp[i] = 0;for (int j = 0; j < array.length; j++)temp[array[j]]++;for (int i = 1; i < k; i++)temp[i] = temp[i] + temp[i - 1];for (int j = array.length - 1; j >= 0; j--) {result[temp[array[j]] - 1] = array[j];temp[array[j]]--;}return result;
}

基数排序

基数排序 要求待排序的元素拥有相同的位数。从元素的低位到高位依次排序。

RADIX-SORT(A, d)
1 for i = 1 to d
2     use a stable sort to sort array A on digit i

基数排序的简单Java实现

public static void radixSort(int[] array) {int len = String.valueOf(array[0]).toString().length();for (int i = 0; i < len; i++)radixQuickSort(array, i);
}

/**
 * 计数排序的变形
 */
public static void radixQuickSort(int[] array, int power) {int[] result = new int[array.length];int[] temp = new int[10];for (int i = 0; i < 10; i++)temp[i] = 0;for (int j = 0; j < array.length; j++)temp[getDigit(array[j], power)]++;for (int i = 1; i < 10; i++)temp[i] = temp[i] + temp[i - 1];for (int j = array.length - 1; j >= 0; j--) {result[temp[getDigit(array[j], power)] - 1] = array[j];temp[getDigit(array[j], power)]--;}for (int i = 0; i < result.length; i++)array[i] = result[i];
}

/**
 * 获得数字第n位的值
 */
public static int getDigit(int value, int power) {return (int) (value / Math.pow(10, power)) % 10;
}

桶排序

桶排序 (bucket sort)的输入符合均匀分布时,它可以以线性时间运行。桶排序假设输入由一个随机过程产生,该过程将元素均匀地分布在区间[ 0, 1 )上。

桶排序的思想就是把区间[ 0, 1 )划分成 n 个相同大小的子区间,或称 。然后,将 n 个输入数分布到各个桶中去。因为输入数均匀分布在[ 0, 1 )上,所以,一般不会有很多数落在一个桶中的情况。为得到结果,先对各个桶中的元素进行排序,然后按次序把桶中的元素列出来即可。

BUCKET-SORT(A)
1  let B[0 .. n - 1] be a new array
2  n = A.length
3  for i = 0 to n - 1
4      make B[i] an empty list
5  for i = 1 to n
6      insert A[i] into list B[FLOOR(nA[i])]
7  for i = 0 to n - 1
8      sort list B[i] with insertion sort
9  concatenate the lists B[0], B[1], ..., B[n - 1] together in order

转载于:https://www.cnblogs.com/sungoshawk/p/3646265.html

算法导论读书笔记(8)相关推荐

  1. 算法导论读书笔记(7)

    算法导论读书笔记(7) 目录 快速排序 快速排序的简单Java实现 快速排序的性能 最坏情况划分 最佳情况划分 快速排序的随机化版本 比较排序 快速排序 快速排序是一种原地排序算法,对包含 n 个数的 ...

  2. 算法导论读书笔记(19)

    http://www.cnblogs.com/sungoshawk/p/3802553.html 算法导论读书笔记(19) 目录 最优二叉搜索树 步骤1:一棵最优二叉查找树的结构 步骤2:一个递归解 ...

  3. 算法导论读书笔记-第十九章-斐波那契堆

    算法导论第19章--斐波那契堆 可合并(最小)堆(mergeable min-heap) : 支持以下5种操作的一种数据结构, 其中每一个元素都有一个关键字: MAKE-HEAP(): 创建和返回一个 ...

  4. 算法导论读书笔记 第4章 分治策略

    在第2章中,归并排序算法使用了分治策略.即在分治策略中,递归地求解一个问题,在每层递归中应包含三个步骤: 分解(Divide)步骤将问题画分为一些子问题,子问题的形式与原问题一样,只是规模更小. 解决 ...

  5. 算法导论读书笔记(20)van Emde Boas树

    第五部分 高级数据结构 第20章 van Emde Boas树 van Emde Boas树支持优先队列操作以及一些其他操作,每个操作最坏情况运行时间为O(lglgn).而这种数据结构限制关键字必须为 ...

  6. 计算机系统导论第九章,计算机系统导论 -- 读书笔记 -- 第三章 程序的机器级表示 (持续更新)...

    计算机系统导论 -- 读书笔记 -- 第三章 程序的机器级表示 (持续更新) 第三章 程序的机器级表示 3.1 历史观点 3.2 程序编码 1. 命令行 (1)编译 Linux> gcc -Og ...

  7. 《漫画算法》读书笔记

    <漫画算法>读书笔记 在图书馆借阅算法书时,看到了一本非常吸引我的算法书--<漫画算法>.算法还能以漫画的方式展示出来吗?我带着我的疑惑翻开了这本书,里面的语言非常接地气,通俗 ...

  8. 《BIG DATA大数据日知录 架构和算法》读书笔记

    2019独角兽企业重金招聘Python工程师标准>>> <BIG DATA大数据日知录 架构和算法>读书笔记 博客分类: 架构 分布式计算 1.数据分片和路由 Hash ...

  9. 重构机器学习算法的知识体系 - 《终极算法》读书笔记

    2019独角兽企业重金招聘Python工程师标准>>> 最近有幸从图书馆借阅了Pedro Domingos的<The Master Alogrithm>一书,这本书的中文 ...

最新文章

  1. 远程监控 – 数据采集管道
  2. C语言再学习 -- 位、字节、字、字长、字元的关系
  3. 最近在玩linux时 yum 遇到了问题
  4. DIV的边距属性在Chrome和IE中的区别
  5. Python多个版本指定如何指定
  6. vba 循环读取单元格_利用VBA打开顺序文件,并读取
  7. PHP笔记-PHP中构造函数要注意的地方
  8. DbHelper重用性方案 优化工具类 jdbc
  9. Mysql和Hive之间通过Sqoop进行数据同步
  10. 北京金融局、通州区政府与蚂蚁金服战略合作 共防系统性金融风
  11. 一个华为设备防病毒 ACL 配置
  12. environment variable is too large 2047
  13. 智能优化算法:缎蓝园丁鸟优化算法-附代码
  14. 远程团队开发10个热门的项目管理软件
  15. powerdesigner数据字典导出模板设置
  16. SnifferProDynamipsGUI环境构建
  17. steam,epic,origin限免游戏推送,持续更新
  18. u盘第一扇区 分区表_硬盘主引导扇区、分区表和分区引导扇区(MBR、DPT、DBR、BPB)详解...
  19. RationalDMIS 2020 SP25扫描测头构建与校验(山涧果子)
  20. matlab计算矩阵中非零元素个数

热门文章

  1. 余额宝放10万元,一年收益大概有多少钱?
  2. 下雨天我叫了顿外卖,就成了人渣?
  3. 美丽新世界:当代日本视觉文化展
  4. Notepad++中用正则表达式匹配中文
  5. 读进程和写进程同步设计_浅谈unix进程进程间通信IPC原理
  6. swift date 计算差_[Swift 设计模式] 适配器
  7. 计算机和公文写作买什么资料,公文写作和计算机应用笔试和复习大纲资料.doc...
  8. xcode 自动化出包
  9. C#中typeof 与GetType()的区别和methodinfo、memberinfo反射
  10. Utility Manager 的一些百度不了的操作