基数排序
来源:互联网 发布:慈溪行知职业 编辑:程序博客网 时间:2024/05/22 02:14
基数排序是将所有待比较数值(正整数)统一为同样的数位长度,数位较短的数前面补零。然后,从最低位开始,一次进行一次排序。这样从最低位排序一直到最高位排序完成之后,数列就变成一个有序序列。
NOTE:
基数排序只能排序非负整数
效率
基数排序的时间复杂度为
实现
基数排序的过程图示如下:
int maxbit( int data[], int size ) //辅助函数,求数据的最大位数{ int i; //先求出最大数,再求最大数的位数. int maxData = data[0]; for ( i = 1; i < size; ++i ) { if ( data[i] > maxData ) maxData = data[i]; } i = 1; while ( maxData >= 10 ) { maxData /= 10; ++i; } return i;}void radix_sort( int data[], int size ){ int d = maxbit( data, size ); //int *temp = (int *)malloc( sizeof(int)*size ); int temp[size]; int count[10]; //计数器 int i, j, k; int radix = 1; for ( i = 1; i <= d; i++ ) { for ( j = 0; j < 10; j++ ) count[j] = 0; //每次分配前清空计数器 //(1) //将data中第i位为j的个数保存在count[j]中 for ( j = 0; j < size; j++ ) { k = ( data[j] / radix ) % 10; //k为data中每个数第i位的数字 count[k]++; } //count[j]中保存第i位小于j的数字的个数 for ( j = 1; j < 10; j++ ) { count[j] = count[j-1] + count[j]; } for ( j = size-1; j >= 0; j-- ) { k = ( data[j] / radix ) % 10; //printf( "k = %d, data[%d] = %d\n", k, j, data[j] ); temp[count[k]-1] = data[j]; count[k]--; } //(2) for ( j = 0; j < size; j++ ) { //printf( "%d ", temp[j] ); data[j] = temp[j]; } radix = radix * 10; }}
阅读全文
0 0
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- mysql可重复读的思考
- 字符串的全排列问题
- shell中函数的使用
- redis学习笔记
- 【DP】TEST20170511
- 基数排序
- java基础零碎练手<一>
- Python网络爬虫与信息提取(中国大学mooc)
- 基于Arduino的GPS数据解析程序
- java.util.Date cannot be cast to java.sql.Date 将date类型的数据存入数据库
- c++中的某些重点知识点
- SpringMVC+ajaxFileUpload.js实现文件上传
- 均值漂移
- 微型技术报告(3)