基数排序--数组模拟桶结构
来源:互联网 发布:开元盛世 知乎 编辑:程序博客网 时间:2024/05/22 12:57
/***********************************************************************基数排序---用数组模拟桶思路:待排序数组 。一个index[10]数组。一个临时数组。按照位数从低位开始排序。即是从个位开始。归类。然后收集。在从十位开始,归类。然后在收集。分配--收集 这两个过程**********************************************************************/#include <stdio.h>#include <string.h>void PrintArray(int a[],int len){for(int i=0;i<len;i++)printf("%d ",a[i]);printf("\n");}// 获取 int x的第bitnum位. 比如取23的第一位 返回3int getdigit(int x,int bitnum){int tmp[]={0,1,10,100}; // tmp[0]忽略。tmp[1]取个位,tmp[2]取十位,tmp[3]取百位return (x/tmp[bitnum])%10;}/**********************************************************************基数排序************************************************************************/void LsdRadixSort(int a[],int len,int maxbitnum){int index[10];// 索引数组 0~9 索引值 比如 23 那么个位的话,应该就是在index[3]内int *Bucket=new int[len]; //用于临时存储收集使用if(NULL==Bucket)return ;int i,j;for(int k=1;k<=maxbitnum;k++) // 从个位开始-第一位{memset(index,0,sizeof(index)); //初始化for(i=0;i<len;i++) // 统计某位上出现数总和。比如 index[0]=3表明个位为3的有3个数++index[getdigit(a[i],k)];for(i=1;i<10;i++)//统计至此索引为止共出现的个数比如 index[4]=5表明至此为止共有5个数了index[i]=index[i]+index[i-1]; //也就是index[4] 应该成为桶数组的第5个数(对应bucket[4])for(i=len-1;i>=0;--i) // 按照某位进行分配 注 从右往左这样保持稳定性{j=getdigit(a[i],k);Bucket[index[j]-1]=a[i];--index[j];//注意要字自减}// 收集 bucket[i]至 a[]中for(i=0;i<len;i++)a[i]=Bucket[i];}delete [] Bucket;Bucket=NULL;}int main(){int a[]={24,12,22,45,89,100,10}; puts("--------排序前----------");int len=sizeof(a)/sizeof(int);PrintArray(a,len);LsdRadixSort(a,len,3);puts("--------排序后----------");PrintArray(a,len);}
0 0
- 基数排序--数组模拟桶结构
- 基数排序-数组模拟实现
- 结构数组模拟零件数据库
- 【排序结构7】 基数排序
- 基于数组的基数排序
- 基数排序(数组版)
- JAVA用数组来模拟栈的结构
- 桶排序与基数排序与计数基数排序
- 桶排序和基数排序(熟练掌握代码中结构体的使用trick)
- 线段树(数组模拟、结构体模拟) I Hate It HDU
- 基数排序、桶排序
- 桶排序与基数排序
- 桶排序之后 --- > 基数排序
- 基数排序和桶排序
- 桶排序与基数排序
- 基数排序(桶排序)
- 桶排序 基数排序
- 桶排序和基数排序
- Scala从零开始:中缀表示法和后缀表示法
- NAND flash和NOR flash的区别详解
- 计算不可压缩流体--差分格式的两个问题
- php apache 根目录
- vector string <--> text
- 基数排序--数组模拟桶结构
- 霸王条款
- [LeetCode] Valid Number
- UVa 301 Transportation
- RadioButton RadioGroup CheckBox
- Hadoop执行报错 JobTracer could only be replicated to 0 nodes, instead of 1
- SQL ADO Excute
- Hibernate的继承映射
- Enterprise Test Driven Develop