博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[Algorithms] Radix Sort
阅读量:6715 次
发布时间:2019-06-25

本文共 2208 字,大约阅读时间需要 7 分钟。

Radix sort is another linear time sorting algorithm. It sorts (using another sorting subroutine) the numbers from their least significant digits to most significant digits. To guarantee the correctness of radix sort, the sorting subroutine must be stable. Moreover, each digit falls in a fixed range. For example, if the numbers are decimal, then all digits fall in [0, 9]. So counting sort is usually used as the subroutine.

The code is as follows. For more on radix sort, please refer to Introduction to Algorithms, 3rd edition.

1 #include 
2 #include
3 #include
4 #include
5 6 using namespace std; 7 8 int maximum(vector
& nums) { 9 int mx = nums[0];10 for (int i = 1; i < (int)nums.size(); i++)11 mx = max(mx, nums[i]);12 return mx;13 }14 15 void countingSort(vector
& nums, int sig) {16 vector
counts(10, 0);17 for (int i = 0; i < (int)nums.size(); i++)18 counts[nums[i] / sig % 10]++;19 for (int i = 1; i < 10; i++)20 counts[i] += counts[i - 1];21 vector
sorted(nums.size());22 for (int i = nums.size() - 1; i >= 0; i--) {23 sorted[counts[nums[i] / sig % 10] - 1] = nums[i];24 counts[nums[i] / sig % 10]--;25 }26 swap(nums, sorted);27 }28 29 void radixSort(vector
& nums) {30 int mx = maximum(nums);31 for (int sig = 1; mx / sig; sig *= 10)32 countingSort(nums, sig);33 }34 35 void radixSortTest(void) {36 int len = 1000;37 vector
nums(len);38 srand((unsigned)time(NULL));39 for (int i = 0; i < (int)nums.size(); i++)40 nums[i] = rand() % (len + 1);41 vector
copy = nums;42 radixSort(nums);43 sort(copy.begin(), copy.end());44 for (int i = 0; i < (int)nums.size(); i++) {45 if (nums[i] != copy[i]) {46 printf("radixSort() test failed!\n");47 return;48 }49 }50 printf("radixSort() test passed!\n");51 }52 53 int main(void) {54 radixSortTest();55 system("pause");56 return 0;57 }

转载于:https://www.cnblogs.com/jcliBlogger/p/4564530.html

你可能感兴趣的文章
学习和使用 PHP 应该注意的10件事
查看>>
.NET Framework 源码
查看>>
ArrayList源码分析
查看>>
JS Object的静态方法汇总( 上 )
查看>>
优朋普乐:OTT正重构电视版图
查看>>
Ubuntu 14.04 LTC 有线网络——网线不识别,灯不亮问题
查看>>
21_css布局2_浮动布局.html
查看>>
DateUtils 单元下的公用函数目录
查看>>
jQuery 练习[二]: 获取对象(1) - 基本选择与层级
查看>>
Sublime Text 2 快捷键用法大全
查看>>
用U盘安装debian系统
查看>>
SequoiaDB 笔记
查看>>
lduan HyPer-V 网络存储(三)
查看>>
SSH 命令行参数详解【英】
查看>>
前端技术学习之选择器(四)
查看>>
2016年4月4日中项作业
查看>>
条件+努力=?
查看>>
hadoop常用服务管理命令
查看>>
洛谷P4169 天使玩偶 (算竞进阶习题)
查看>>
Order By操作
查看>>