【排序】基数排序
来源:互联网 发布:剑网3天策数据 编辑:程序博客网 时间:2024/05/01 13:08
#include<iostream>using namespace std;//求数据的最大位数int get_max_bit(int nums[], int len){ int count; int max = 1; int* temp = new int[len]; for (int i = 0; i < len; i++) temp[i] = nums[i]; for (int i = 0; i < len; i++){ count = 0; while (temp[i]>0){ temp[i] /= 10; count++; } if (count>max) max = count; } delete[] temp; return max;}void radix_sort(int nums[], int len){ int i, j, k; int count[10];//各个桶的数据统计 int radix = 1;//基数 int* buckets = new int[len]; int max_bit = get_max_bit(nums, len); //按照从低位到高位的顺序执行排序过程 for (i = 1; i <= max_bit; i++){ memset(count, 0, sizeof(count));//置空各个桶的数据统计 for (j = 0; j < len; j++){ k = (nums[j] / radix) % 10; count[k]++;//统计各个桶将要装入的数据个数 } //count[j]表示第j个桶的右边界索引 for (j = 1; j < 10; j++) count[j] += count[j - 1]; //从右向左扫描将数据依次装入桶中,保证排序稳定性 for (j = len - 1; j >= 0; j--){ k = (nums[j] / radix) % 10; count[k]--; buckets[count[k]] = nums[j]; } cout << "按" << i << "位排序:"; //将已分配好的桶中数据再倒出来,此时已是对应当前位数有序的表 for (j = 0; j < len; j++){ nums[j] = buckets[j]; cout << nums[j] << " "; } cout << endl; radix *= 10; }}int main(){ int nums[] = { 34, 25, 76, 234, 62, 17 }; radix_sort(nums, 6); cout << "最终排序结果:"; for (int i = 0; i<6; i++) cout << nums[i] << " "; cout << endl; return 0;}
0 0
- 【排序】基数排序
- 【排序】基数排序
- 【排序】基数排序
- 排序 基数排序
- 排序算法-基数排序_基数排序
- 数据结构 排序 基数排序
- 排序——基数排序
- 稳定排序之基数排序
- 计数排序,基数排序
- 计数排序和基数排序
- 排序算法之基数排序
- 线性排序之基数排序
- 排序算法 - 基数排序(C++)
- 【排序算法】基数排序(RadixSort)
- 排序算法-基数排序
- 基数排序、桶排序
- 计数排序-基数排序
- 排序系列之基数排序
- tengine 淘宝 nginx
- 表单新增元素与属性
- Json解析详细教程
- Time类中的运算符重载
- android SeekBar设置背景无法被填充满的bug
- 【排序】基数排序
- GSM蜂窝基站定位基本原理浅析
- C补习
- java实现静态图片剪切缩放功能【工具类】
- 关于django服务器重启端口占用解决方案
- WAJUEJI which home strong! nyoj 1100
- getsockopt 和 setsockopt讲解
- GK倒计时
- Qt removeDatabase正确方法