首页 > 代码库 > 基数排序

基数排序

#include<stdio.h>#include<stdlib.h>#include<math.h>struct Node{    int key;    Node *next;    Node(int k)    {        key = k;        next = NULL;    }};void Insert(Node **phead,int k){    if(*phead == NULL)    {        *phead = new Node(k);    }    else    {        Node *p = *phead;        while(p->next!=NULL)        {            p = p->next;        }        p->next = new Node(k);    }}void Clear(Node **phead){    if(*phead == NULL)    {        return;    }    else    {        Node *p = *phead;        Node *q;        while(p->next!=NULL)        {            q=p->next;            delete p;            p=q;        }        delete p;        p = NULL;        q = NULL;        *phead = NULL;    }}int maxValue(int *A,int len){    if(A==NULL)    {        printf("A==NULL\n");        exit(0);    }    int max=A[0];    for(int i=0;i<len;i++)    {        if(A[i]>max)        {            max = A[i];        }    }    return max;}int maxColum(int num){    for(int i=1;i<11;i++)    {        if(num/(int)pow(10.0,i) == 0)        {            return i;        }    }}void RadixSort(int *A,int len){    int max = maxValue(A,len);    int colum = maxColum(max);    Node **B = new Node*[10];    for(int i=0;i<10;i++)    {        *(B+i) = NULL;    }    for(int j=0;j<colum;j++)    {        int index=0;        for(int i=0;i<len;i++)        {            index = (A[i]/(int)pow(10.0,j))%10;            Insert(&B[index],A[i]);        }        int k=0;        for(int i=0;i<10;i++)        {            Node *p = B[i];            while(p!=NULL)            {                A[k]=p->key;                ++k;                p=p->next;            }        }        for(int i=0;i<10;i++)        {            Clear(&B[i]);        }    }}int main(){    int A[]={31,52,42,12,65,325,24,13};    int len = sizeof(A)/sizeof(int);    RadixSort(A,len);    for(int i=0;i<len;i++)    {        printf("%d ",A[i]);    }    printf("\n");    return 0;}

 

基数排序