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

    基数排序属于“分配式排序”(distributionsort),基数排序法又称“桶子法”(bucketsort)或binsort,顾名思义,它是透过键值的部份资讯,将要排序的元素分配至某些“桶”中,借以达到排序的作用,基数排序法是属于稳定性的排序,其时间复杂度为O(nlog(r)m),其中r为所采取的基数,而m为堆数,在某些时候,基数排序法的效率高于其它的比较性排序法。

    其为桶排序的一种延伸,对于一串数值序列,如果首先根据个位依次把数据放入0~9个桶中,然后遍历取出,则此时所有的个位是有序的。然后再重用这些桶,对其十位进行排序,因为桶排序是稳定排序,所以十位排序完后,每个桶之间是有序的,桶内因为保留了之前排序的顺序,所以依然是有序的。若最终完成了所有位的排序,整个序列必然是有序的。

     1 int GetBit(int num, int ord)//获得某一位的数值
     2 {
     3     while (ord--)
     4         num /= 10;
     5     return num % 10;
     6 }
     7 void RadixSort(int num[], int len)
     8 {
     9     int MaxBit = 0;
    10     for (int i = 0;i < len;i++)
    11         MaxBit = (MaxBit < log10(num[i]) ? log10(num[i]):MaxBit);//获取最长位数
    12     int temp[10][100];
    13     for(int i=0;i<2;i++)
    14     {
    15         memset(temp, 0, sizeof(temp));
    16         for (int j = 0;j < len;j++)
    17         {
    18             int nowbit = GetBit(num[j], i);
    19             temp[nowbit][++temp[nowbit][0]] = num[j];//把每个数按当前排序位存入相应的桶,temp[][0]保存了此时桶内占用情况,数值从temp[][1]开始存放
    20         }
    21         int pos = 0;
    22         for (int i = 0;i < 10;i++)
    23             for (int j = 1;j <= temp[i][0];j++)//按序取出数值
    24                 num[pos++] = temp[i][j];
    25     }
    26 }
  • 相关阅读:
    设置WebSphere字符集参数
    防SQL注入
    改变radio/checkbox默认样式
    数据完整性约束错误
    Java项目多数据源配置
    No row with the given identifier exists:错误另解
    ICTCLAS20160405分词系统调试过程
    centos7 忘记root密码
    java之Junit
    javaweb之登录
  • 原文地址:https://www.cnblogs.com/LukeStepByStep/p/5774984.html
Copyright © 2011-2022 走看看