/************************************************************
*基数排序
*使用数组/链表完成
*核心代码: radixSortByArr(int arr[], int n) / radixSortByList(int arr[], int n)
*使用数组实现的算法核心: res[ arr[i] ]+=1 ; //将待排序数组的值当作索引计数(res[20]=2;表示有2个20)
*使用链表实现的算法核心: 循环MaxBit次。从低位到高位,每次排序一位。
使用链表记录每次的排序结果,采用尾查法实现链表内部的排序
一趟排序结束,将结果输出到待排序数组中
*author: fangchang
*date: 2016/03/25
*time: 11:34
**************************************************************/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 5 //待排序数的个数
#define RADIX_NUM 10 //桶的个数,0-9共10个数字,所以是10
typedef struct node { //链表的节点声明
int value;
struct node *next;
}*pnode;
void deleteList(pnode head); //清空链表
void insertInEnd(pnode head,int value); //尾插
void answer1();
void radixSortByArr(int arr[], int n); //使用数组实现基数排序(所有的数字都是正整数)
void answer2();
void radixSortByList(int arr[], int n); //core code
void printToArr(pnode radixArr[],int arr[], int n);
int findMax(int arr[] , int n); //数组中的最大值
int maxBitNum(int value); //最大值的位数(111的位数是3)
int valueInBit(int value, int bitNum); //返回指定位(bitNum)上的数字(0-9)
int main() {
//answer1();
answer2();
fflush(stdin);
getchar();
return 1;
}
void answer1(){ //使用数组完成基数排序
*基数排序
*使用数组/链表完成
*核心代码: radixSortByArr(int arr[], int n) / radixSortByList(int arr[], int n)
*使用数组实现的算法核心: res[ arr[i] ]+=1 ; //将待排序数组的值当作索引计数(res[20]=2;表示有2个20)
*使用链表实现的算法核心: 循环MaxBit次。从低位到高位,每次排序一位。
使用链表记录每次的排序结果,采用尾查法实现链表内部的排序
一趟排序结束,将结果输出到待排序数组中
*author: fangchang
*date: 2016/03/25
*time: 11:34
**************************************************************/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 5 //待排序数的个数
#define RADIX_NUM 10 //桶的个数,0-9共10个数字,所以是10
typedef struct node { //链表的节点声明
int value;
struct node *next;
}*pnode;
void deleteList(pnode head); //清空链表
void insertInEnd(pnode head,int value); //尾插
void answer1();
void radixSortByArr(int arr[], int n); //使用数组实现基数排序(所有的数字都是正整数)
void answer2();
void radixSortByList(int arr[], int n); //core code
void printToArr(pnode radixArr[],int arr[], int n);
int findMax(int arr[] , int n); //数组中的最大值
int maxBitNum(int value); //最大值的位数(111的位数是3)
int valueInBit(int value, int bitNum); //返回指定位(bitNum)上的数字(0-9)
int main() {
//answer1();
answer2();
fflush(stdin);
getchar();
return 1;
}
void answer1(){ //使用数组完成基数排序