zoukankan      html  css  js  c++  java
  • 八种排序整理(七)----基数排序

    基本概念:基数排序(Radix Sorting)是一种借助多关键字排序的思想对单逻辑关键字进行关系的方法。

    基数排序不需要进行记录关键字间的比较。

     
    主要分为两个过程:

    (1)分配,先从个位开始,根据位值(0-9)分别放到0~9号桶中(比如53,个位为3,则放入3号桶中)。

    (2)收集,再将放置在0~9号桶中的数据按顺序放到数组中 。

    基数排序的特点:

    稳  定  性:稳定
    时间复杂度:O(kn)(k表示整形的最高位)
    空间复杂度:O(10n)

    #include <iostream>
    #include <stdlib.h>  
    
    void RadixCountSort(int *index, int *a, int len)    //收集 
    {  
        int *count = (int *)malloc(sizeof(int) * 10);
        int i;
    
        for (i = 0; i < 10; 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[count[index[i]]] = a[i];  
        }  
      
        for (i = 0; i < len; i++)
        {  
            a[i] = sort[i];  
        }
        
        free(sort);
        free(count); 
    }  
    
    void RadixSort(int *a, int len)             //分配  
    {  
        int *radix = (int *)malloc(sizeof(int) * len);  
      
        int x = 1; 
        int tmp = 1;
    
        while (x)  
        {
            int i;
            x = 0;  
            tmp *= 10;  
       
            for (i = 0; i < len; i++)  
            {  
                radix[i] = a[i] % tmp;  
                radix[i] /= tmp / 10; 
                if (a[i] / tmp > 0)  
                {  
                   x = 1;  
                }
            }
    
            RadixCountSort(radix, a, len);    
        }  
      
        free(radix);  
    }  
     
    int main()  
    {
        int i;
        int a[] = {278, 109, 63, 930, 589, 184, 505, 269, 8, 83};  
        int len = sizeof (a) / sizeof (int);
    
        RadixSort(a, len);  
      
        for (i = 0; i < len; i++)  
        {  
            printf("%d ", a[i]);  
        }  
        printf("
    ");  
        while(1);
        return 0;  
    }  
  • 相关阅读:
    nginx加php(三) 启动脚本
    nginx加php(一)
    xshell设置
    SQL的DDL和DML
    Python操作MongoDB
    OpsManager管理MongoDB
    MongoDB-GridFS
    执行计划及慢查询
    监控指标
    备份恢复
  • 原文地址:https://www.cnblogs.com/kutoli/p/8337917.html
Copyright © 2011-2022 走看看