头文件 Number.h
#pragma once
#include <iostream>
#include <math.h>
#include <time.h>
using namespace std;
class Number{
public:
Number(void);
Number(int num);
~Number(void);
int value;
int operator[](int i){//return the ith digit, counter from 0
return value/(int)(pow(10.0,i)) % 10;
}
};
#include "Number.h"
Number::Number(int num){
this->value = num;
}
Number::Number(void){
}
Number::~Number(void){
}
void countSortByDigit(Number arr[], int n, int index){
Number* B = (Number*)malloc(n*sizeof(Number));
int C[10];
memset(C,0,10*sizeof(int));
for(int i=0; i<n; i++){
C[arr[i][index]]++;
}
for(int i=1;i<10;i++){
C[i]+=C[i-1];
}
for(int i=n-1; i>=0; i--){
B[C[arr[i][index]]-1] = arr[i];
C[arr[i][index]]--;
}
memcpy(arr,B,n*sizeof(Number));
free(B);
}
void printArray(Number arr[], int n){
for(int i=0; i<n; i++){
cout<<arr[i].value<<" ";
}
cout<<endl;
}
void radixSort(Number arr[], int n){// three digit number
for(int i=0; i<3; i++){
countSortByDigit(arr,n,i);
}
}
void initArray(Number arr[], int n){
srand(time(NULL));
for(int i=0; i<n; i++){
Number b(rand()%1000);
arr[i] = b;
}
}
void main(){
const int AD = 20;
Number arr[AD];
initArray(arr,AD);
printArray(arr,AD);
radixSort(arr,AD);
printArray(arr,AD);
}