键索引计数法 Java的实现与思路

对于字符串的排序,不同与之前所学的值得排序,字符串的比较更为复杂,这里先学习一个基础算法叫做索引计数法,他是lfs和mfs的实现基础。

这个算法要求我们可以获取目标的键并按照这个键来排序。
此时我们有数据如下:
值 键
abc 2
cba 1
cca 3
cas 2
sas 1
sss 3
我们想要按照键调整数组的顺序
思路:
1.我们建立一个count数组用来记录每个键(键与count的索引一一对应)所对应元素的数量,
2.此时我们count数组中进行累加操作,那么此时count中记录的就是目标元素的起始索引了。
3.我们建立一个缓存string数组来存放排好序的元素
4,将排好序的元素回写到原数组中

代码:

/**
 * j建索引计数法
 *
 */
public class suanfa11 {
    public static void main(String[] args) {
        myStr[] myStrs = {new myStr(2,"test1"),new myStr(1,"sss"),new myStr(3,"sss"),new myStr(2,"Ssss")
                            ,new myStr(2,"Sssdasd"),new myStr(1,"Sdrsa"),new myStr(2,"Sdawaxz")
        };
        //排序
        indexSort(myStrs,4);
		//打印
        for (myStr myStr : myStrs) {
            System.out.println(myStr.val+"--"+myStr.key());
        }
    }

    public static void indexSort(myStr[] a,int r){
        int[] count = new int[r+1];
        for (myStr myStr : a) {
            count[myStr.key+1]++;
        }

        for (int i = 0; i < count.length-1; i++) {
            count[i+1]+=count[i];
        }
        
        for (int i : count) {
            System.out.println(i);
        }

        myStr[] aux = new myStr[a.length];

        for (int i = 0; i < a.length; i++) {
            aux[count[a[i].key]++] = a[i];
        }

        for (int i = 0; i < a.length; i++) {
            a[i] = aux[i];
        }

    }
}
class myStr{
    int key;
    String val;

    public myStr(int key, String val) {
        this.key = key;
        this.val = val;
    }

    public int key() {
        return key;
    }

    public String val() {
        return val;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值