// RadixSort.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <cstring>
using namespace std;
int rxSort(int *data, int size, int p,int k)
{
int *count, *tmp;
int index, pval;
int i, j, n;
if((count = (int *)malloc(k * sizeof(int))) == NULL)
return -1;
if((tmp = (int *)malloc(size * sizeof(int))) == NULL)
return -1;
for(n = 0; n < p; ++n)
{
for(i = 0; i < k; ++i)
count[i] = 0;
pval = (int)pow((double)k, (double)n);
for(j = 0; j < size; ++j)
{
index = (int)(data[j] / pval) % k;
count[index] += 1;
}
for(i = 1; i < k; ++i)
{
count[i] += count[i-1];
}
for(j = size-1; j >= 0; --j)
{
index = (int)(data[j] / pval) % k;
tmp[count[index] - 1] = data[j];
count[index] -= 1;
}
memcpy(data, tmp, size*sizeof(int));
}
free(count);
free(tmp);
return 0;
}
int main(int argc, char* argv[])
{
int test[] = {9, 8, 7, 1, 2, 3, 6, 4, 5, 10, 0};
int size = sizeof(test) / sizeof(int);
rxSort(test, size, 2, 10);
for(int i = 0; i < size; ++i)
cout<<test[i]<<" ";
cout<<endl;
//printf("Hello World!\n");
return 0;
}
Radix Sort
最新推荐文章于 2022-11-08 00:32:52 发布