首页 > 其他 > 详细

基数排序

时间:2014-08-26 21:15:56      阅读:286      评论:0      收藏:0      [点我收藏+]
#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;
}

 

基数排序

原文:http://www.cnblogs.com/johnsblog/p/3938155.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!