zoukankan      html  css  js  c++  java
  • 基数排序

    #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
    ");
            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("
    ");
        return 0;
    }
  • 相关阅读:
    【转载】openCV轮廓操作
    求两个已排序数组的中位数
    朴素贝叶斯分类
    Different Ways to Add Parentheses
    QSerialPort
    opencv鼠标绘制直线 C++版
    Word Break
    C++中 指针 与 引用 的区别
    敲入url到浏览器后会发生什么
    Sort List 分类: leetcode 算法 2015-07-10 15:35 1人阅读 评论(0) 收藏
  • 原文地址:https://www.cnblogs.com/johnsblog/p/3938155.html
Copyright © 2011-2022 走看看