#include <iostream>
#include <stdlib.h>
#include <time.h>
#include <cstring>
using namespace std;
void Print(unsigned int * _arr, int nums)
{
for(int i=0; i<nums; i++)
{
cout<<_arr[i]<<" ";
}
cout<<endl;
}
int getdigit(unsigned int digit, unsigned int bit )
{
int bits[5] = {0, 1, 10 , 100, 1000}; //bits[0] 没有用 占位使用
return digit/bits[bit]%10;
}
int main()
{
srand((unsigned)time(NULL));
int nums = 1000;
unsigned int * arr = new unsigned int[nums];
unsigned int * bucket = new unsigned int[nums];
memset(bucket, 0, nums);
for(int i=0; i<nums; i++)
{
arr[i] = rand()%10000;
}
Print(arr, nums);
int * counts = new int[10];
memset(counts, 0, sizeof(int)*10);
for(int j=1; j<=4; j++)
{
for(int i=0; i<nums; i++)
{
counts[getdigit(arr[i], j)]++;
}
for(int h=1; h<10; h++)
{
counts[h] = counts[h] + counts[h-1];
}
for(int i=0; i<nums; i++)
{
unsigned int num = arr[i] ;
int bit = counts[getdigit( num , j ) ];
bucket[ bit - 1] = arr[i];
counts[ getdigit( arr[i], j ) ] -- ;
}
//一定要重新赋值,调试时因为没有重新赋值,导致越界
memset(counts, 0, sizeof(int)*10);
for(int i=0; i<nums; i++)
{
arr[i] = bucket[i];
}
}
}
基数排序
最新推荐文章于 2022-02-28 10:58:03 发布