基数排序

来源:互联网 发布:手机淘宝购物付款方式 编辑:程序博客网 时间:2024/05/18 12:41
//基数排序#include <iostream>#include <iomanip>#include <cstdlib>#include <ctime>#define KEYNUMBER 3//整型数的位数#define RADIX 10//每位数字从0到9共有九个#define NUMBER 100using namespace std;int getNumInPos(int,int);void radixSort(int *,int);void print(int *,int);int main(){int pData[NUMBER];srand((unsigned(time(NULL))));for(int i=0;i<NUMBER;i++){pData[i] = rand()%1000;//产生三位以内的随机数}cout << "before radixSort:" << endl;print(pData,NUMBER);radixSort(pData,NUMBER);cout << "\nafter radixSort:" << endl;print(pData,NUMBER);system("pause >> cout");return 0;}//pos从1开始//number为整形数据,pos是要获得的整形数据从低到高第pos位数据int getNumInPos(int number,int pos){int temp = 1;for(int i=1;i<pos;i++){temp = temp * 10;}return (number/temp)%10;}//pDataArray为无序数组,number为无序数组元素个数void radixSort(int *pDataArray,int number){int *radixArray[RADIX];//分配0到9的序列空间for(int i=0;i<RADIX;i++){radixArray[i] = new int[number+1];radixArray[i][0] = 0;//index为0处记录这组数据的个数}for(int pos=1;pos<=KEYNUMBER;pos++)//从个位开始到第KEYNUMBER位{for(int i=0;i<number;i++)//分配过程{//得到元素在pos位的数值int num = getNumInPos(pDataArray[i],pos);int index = ++radixArray[num][0];//得到此时元素在radixArray中的下标radixArray[num][index] = pDataArray[i];}for(int i=0,j=0;i<RADIX;i++)//收集{for(int k=1;k<=radixArray[i][0];k++){pDataArray[j++] = radixArray[i][k];}radixArray[i][0] = 0;//复位  ,这个一定不能忘额}}}void print(int *pDataArray,int number){for(int i=0;i<number;i++){cout << setw(4) << pDataArray[i];if((i+1)%15==0)cout << endl;}}

0 0
原创粉丝点击