码迷,mamicode.com
首页 > 编程语言 > 详细

基数排序

时间:2020-06-03 17:36:42      阅读:76      评论:0      收藏:0      [点我收藏+]

标签:radix   exit   lib   int   style   ++   base   span   std   

技术图片

 

 

#include<stdio.h>
#include<stdlib.h>

void print_arr(int arr[],int N)
{
    int i;
    for(i=0;i<N;i++)
    {
        printf("%d ",arr[i]);
    }
}
void radix_sort(int A[],int N)
{
    int max=A[0];
    
    int i;
    for(i=0;i<N;i++)
    {
        max=(max>A[i])?max:A[i];
    }
    
    int *t=(int *)malloc(sizeof(int)*N);
    if(NULL==t)/*NULL==t比t==NULl安全,如果将==写成=,NULL=t会报错,因为不能将变量的值赋给常数*/
    {
        printf("F");
        exit(1);
    }
int base=1;
    while(max/base>0)/*错误:max/base>=10,最后一次无法进入循环*/
    {
        int count[10]={0};
        
        for(i=0;i<N;i++)
        {
            count[(A[i]/base)%10]++;
        }
        
        for(i=1;i<10;i++)
        {
            count[i]=count[i]+count[i-1];
        }
        
        for(i=N-1;i>=0;i--)/*粗心的错误:i++*/ 
        {
            t[count[(A[i]/base)%10]-1]=A[i];
            count[(A[i]/base)%10]--;
        }
        
        for(i=0;i<N;i++)
        {
            A[i]=t[i];
        }
        
        base*=10;
    }
} 

int main()
{
    int A[7]={100,34,1002,1234,66,137,49};
    int N=7;
    radix_sort(A,N);
    
    int i;
    for(i=0;i<N;i++)
    {
        printf("%d ",A[i]);
    }
    return 0;
}

 

基数排序

标签:radix   exit   lib   int   style   ++   base   span   std   

原文地址:https://www.cnblogs.com/angury/p/13038669.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!