线性时间排序之基数排序
来源:互联网 发布:阿里云服务器乱码 编辑:程序博客网 时间:2024/05/29 08:05
头文件 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);
}
- 线性时间排序之基数排序
- 线性时间排序之——基数排序
- 线性时间排序之计数排序,基数排序和桶排序
- 线性排序之基数排序
- 线性排序之:基数排序
- 计数排序 (线性时间排序之基数排序,计数排序及java实现)
- 五 线性时间排序(基数排序、计数排序和桶排序)
- 线性时间排序——计数排序,基数排序,桶排序
- 算法导论-- 线性时间排序(计数排序、基数排序、桶排序)
- 线性时间排序(计数排序/桶排序/基数排序)
- 线性时间排序--计数排序、基数排序、桶排序
- 线性时间排序(计数排序、基数排序、桶排序)
- 线性时间排序:计数排序、基数排序、桶排序
- 三大线性排序之基数排序
- 第八章线性时间排序之“基数排序RADIX-SORT”(练习8.3-1)
- 线性排序之基数排序,桶排序,计数排序
- 算法导论:第8章 线性时间排序__基数排序
- 【算法学习】线性时间排序-计数排序、基数排序和桶排序详解与编程实现
- HDU 3729 I'm Telling the Truth
- Git学习教程(二):配置和初始化
- googlecode 的项目无法通过 SVN 访问解决方法
- struts2标签嵌套问题
- tasklet和work_struct机制
- 线性时间排序之基数排序
- ubuntu网卡配置
- iBatis 和 ORM学习
- Cassandra,Mongodb,CouchDB,Redis,HBase分类探讨
- 创建Hibernate简单的添加 删除操作
- Webx SpringExt
- MSComm写串口通信驱动步骤
- JQuery操作table
- rand-取小于一个定值M以内,N个不重复的数(M>=N)