美文网首页
字符串排序:键索引计数法

字符串排序:键索引计数法

作者: 我的轩辕 | 来源:发表于2017-05-09 21:09 被阅读543次

字符串排序有很多应用,比如车牌的排序,基因编码等。今天介绍一种低位优先的字符串排序算法,在介绍它之前先介绍另一种算法--键索引计数法,它是前者的基础。

键索引计数法

适用性:用于小整数键的算法

比如数组a={1,2,3,4,2,3,4,2,1,3,4,2,3,4},它里面重复的数字比较多,不重复的只有1,2,3,4,这时就可以用此方法

步骤

  • 1、频率统计
    统计各个数字出现的此时,这里1出现了2次,2出现了4次,3出现了4次
    4出现了4次,并记录下来,我们用一个5位的数组记录。

    为什么5而不是4呢?接下来你就会知道

  • 2将频率转化为索引
    前面我们记录了各自数字的次数,并用数组保存,假设保存的数组为a[0]=0,a[1]=2,a[2]=4,a[3]=4,a[4]=4 这里从1开始计数,而不是从0,并不是为了与排序的数字对应,而是为了计算索引的方便,任意键的起始索引均为所有较小键的频率之和,我们就可以a[i+1]+=a[i]递推得到,这样a[0]=0,a[1]=2,a[2]=6,a[3]=10,a[4]=14,这样第一个数字(即1)的起始位置为 0,第2个数字(即 2)的起始位置为2......

    多一个位置的好处就已经体现出来了,第一个就是用来标记最开始的起始位置的

  • 数据分类
    得到各个数字的起始索引,接下来就是将原数组进行归类,将相同的数字放在一起,这里我们用一个临时的数组进行记录

  • 回写回原数组
    最后是将临时数组中的值写会原数组

代码实现:

public class countSort {
    public static void  main(String[] args){
        int[] nums={2,3,4,1,2,4,3,1,2,2,1};
        countSort sort=new countSort();
        sort.indecCountIndex(nums);
    }

    public void indecCountIndex(int[] nums){
        int[] count=new int[6];
         //计算频率
        for(int i=0;i<nums.length;i++){
            count[nums[i]+1]++;
        }
       //将频率转化为索引
        for(int i=1;i<count.length;i++){
            count[i]=count[i]+count[i-1];
        }
      //数据分类
        int[] aux=new int[nums.length];
        for(int i=0;i<nums.length;i++){
            aux[count[nums[i]]++]=nums[i];
        }
      //回写数据(我这里是打印)
        for(int i=0;i<nums.length;i++){
            System.out.print(aux[i]+" ");
        }
    }
}

相关文章

  • 《算法》笔记 13 - 字符串排序

    键索引计数法频率统计将频率转换为索引数据分类回写 低位优先的字符串排序 高位优先的字符串排序 许多重要而熟悉的问题...

  • 字符串排序(一)

    键索引计数法键索引计数法是一种适用于整数键的简单排序方法。为了说明这种方法,假设数组a[]中的每个元素都保存了一个...

  • 字符串排序:键索引计数法

    字符串排序有很多应用,比如车牌的排序,基因编码等。今天介绍一种低位优先的字符串排序算法,在介绍它之前先介绍另一种算...

  • 键索引计数法

    键索引计数法 是LSD MSD算法的基础 背景 比如一个班级的学生成绩分为 1,2,3,4 4个等级这样我们就...

  • 字符串排序

    键索引排序法 键索引排序法主要用来解决分组排序的问题。例如:一个班级有分为三个组,每个组编号1~3。 需要对以上学...

  • 字符串算法一:排序(键索引计数法、LSD、MSD)

    最近有点空闲时间了,在啃 Sedgwick 的 Algorithm 这本经典算法书,前面的以前就会,最后一张字符串...

  • C语言十大排序一

    计数排序 注意点和使用场景计数排序只能用于有限数据的排序,并且数字不是非常大的时候 计数排序的条件1.数组索引必须...

  • Android 算法之排序算法(计数排序)

    计数排序 计数排序(Counting Sort)不是基于比较的排序算法,其核心在于将输入的数据值转化为键存储在额外...

  • 排序算法⑧——计数排序

    计数排序 计数排序的核心在于将输入的数据值转化为键存储在额外开辟的数组空间中。作为一种线性时间复杂度的排序,计数排...

  • 计数排序

    计数排序的核心在于将输入的数据值转化为键存储在额外开辟的数组空间中。作为一种线性时间复杂度的排序,计数排序要求输入...

网友评论

      本文标题:字符串排序:键索引计数法

      本文链接:https://www.haomeiwen.com/subject/dumitxtx.html