当前位置: 首页 > 知识库问答 >
问题:

实现字符串计数排序时遇到的问题

沈枫涟
2023-03-14
html prettyprint-override">import java.util.Arrays;

public class StringCountSort{
    
    public static void countingSort(String[] array, int size, int digit)
    {

        String[] result = new String[size+1];
        
        int maximum = 122;
        
        int[] count = new int[maximum + 1];
        for (int i = 0; i < count.length; i++){
            count[i] = 0;
        }
        
        for (int i = 0; i < size; i++){
            count[array[i].charAt(digit)] +=1;
        }
        
        for (int i = 1; i < count.length; i++){
            count[i] += count[i-1];
        }
    
        for (int i = size -1; i >= 0; i--){

            result[count[array[i].charAt(digit)] - 1] = array[i];
            count[array[i].charAt(0)]--;
        }

        for (int i = 0; i < size; i++) {
            array[i] = result[i];
        }
    }
    
    public static void main(String args[]){
        String[] data = { "eg", "fa", "bz", "ch", "hv", "df", "ag" };
        StringCountSort.countingSort(data, data.length, 1);
        System.out.println("Sorted Array in Ascending Order: ");
        System.out.println(Arrays.toString(data));
        
        
        
    }
}
line 28 result[count[array[i].charAt(digit)] - 1] = array[i]; 

line 37 StringCountSort.countingSort(data, data.length, 1); 

共有1个答案

党佐
2023-03-14

改变

count[array[i].charAt(0)]--;

count[array[i].charAt(digit)]--;

这应该能奏效。

    null
    public static void countingSort(String[] array, int digit) {
        String[] result = new String[array.length];
        int[] count = new int[Character.MAX_VALUE + 1];

        for (int i = 0; i < array.length; i++){
            count[array[i].charAt(digit)]++;
        }
        for (int i = 1; i < count.length; i++){
            count[i] += count[i-1];
        }
        for (int i = array.length -1; i >= 0; i--){
            result[count[array[i].charAt(digit)] - 1] = array[i];
            count[array[i].charAt(digit)]--;
        }
        for (int i = 0; i < array.length; i++) {
            array[i] = result[i];
        }
    }
 类似资料:
  • 我一直在尝试在我正在开发的程序中实现各种类型的排序。到目前为止,我已经成功地对整数进行了排序。为了使这个(合并)代码排序为字符串数组而不是整数数组,需要做哪些更改?时间复杂度会变化吗?如果是这样,是好是坏? 编辑1:尝试使用比较器。有些事情似乎不对劲。返回错误,例如无法从字符串转换为int,反之亦然。固定的 编辑2:我在if(数组[low].compareTo(数组[high])行得到NullPo

  • 本文向大家介绍java实现字符串排列组合问题,包括了java实现字符串排列组合问题的使用技巧和注意事项,需要的朋友参考一下 本文为大家介绍了java实现字符串排列组合问题,供大家参考,具体内容如下 组合: 要么选择长度为n的字符串中的第一个字符,那么要在其余的长度n-1的字符串中选择m-1个字符 要么不选择长度为n的字符串中的第一个字符,那么要在其余的长度n-1的字符串中选择m个字符 以上就是本文

  • 本文向大家介绍java String[]字符串数组自动排序的简单实现,包括了java String[]字符串数组自动排序的简单实现的使用技巧和注意事项,需要的朋友参考一下 如下所示: 打印结果:(数字、大写、小写,安装ACS码值进行排序) 以上这篇java String[]字符串数组自动排序的简单实现就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持呐喊教程。

  • 在我看来最好的情况应该是O(log n),但不确定最坏的情况...也许O(n^2)一次只能匹配一个字母。 谁能给我更多的点子吗?

  • 本文向大家介绍javascript排序函数实现数字排序,包括了javascript排序函数实现数字排序的使用技巧和注意事项,需要的朋友参考一下 javascript排序函数实现数字排序 以上所述就是本文的全部内容了,希望大家能够喜欢。

  • 问题内容: 我有一个数组 并且需要对其进行排序,使其看起来像; 我尝试了排序功能; 但这给出了命令 我试图考虑一个正则表达式可以正常工作,但无法解决这个问题。 如果有帮助,格式将始终为2个字母,x个数字,然后是任意数量的字符。 问题答案: 这称为“自然排序”,可以像这样在JS中实现: 要以相反的顺序排序,只需交换参数即可: 或简单地