基数排序

本文介绍了一种基于数组的基数排序算法实现,通过分配和收集两个阶段完成整数数组的排序过程。该算法适用于非负整数,并能有效地处理大数据量的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

int RadixCountSort(int *index, int *a, int len)    //收集 
{  
	int *count = (int *)malloc(sizeof(int) * 10);
	int i;

    for (i = 0; i < len; ++i)  
    {  
        count[i] = 0;  
    }

    for (i = 0; i < len; ++i)
	{  
        ++count[index[i]];  
    }  
  
	for (i = 1; i < 10; ++i)
	{  
        count[i] += count[i - 1];  
    }  
  
    int *sort = (int *)malloc(sizeof(int) * len);
 
	for (i = len - 1; i >= 0; --i)  
	{  
		--count[index[i]];          
        sort[cqdex[i]]] = a[i];  
    }  
  
    for (i = 0; i < len; ++i)
    {  
        a[i] = sort[i];  
    }
	
    free(sort);
    free(count);

    return 1;  
}  

int RadixSort(int *a, int len)             //分配  
{  
    int *radix = (int *)malloc(sizeof(int) * len);  
  
    int radix_base = 1; 
    int is_ok = 0;

    while (!is_ok)  
    {
		int i;
        is_ok = 1;  
        radix_base *= 10;  
   
        for (i = 0; i < len; ++i)  
		{  
            radix[i] = a[i] % radix_base;  
            radix[i] /= radix_base / 10; 
            if (a[i] / (radix_base / 10) > 0)  
            {  
               is_ok = 0;  
            }
		}
		if (is_ok)  
		{  
           break;         
		}  

        RadixCountSort(radix, a, len);    
	}  
  
    free(radix);  
  
    return 1;  
}  
 
int main()  
{
	int i;
    int a[] = {278, 109, 63, 930, 589, 184, 505, 269, 8, 83};  
	int len = sizeof (a) / sizeof (a[0]);

    RadixSort(a, len);  
  
    for (i = 0; i < len; ++i)  
    {  
        printf("%d ", a[i]);  
	}  
    printf("\n");  
 
    return 0;  
}  

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值