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

字符串合并排序实现

苗运珧
2023-03-14

我一直在尝试在我正在开发的程序中实现各种类型的排序。到目前为止,我已经成功地对整数进行了排序。为了使这个(合并)代码排序为字符串数组而不是整数数组,需要做哪些更改?时间复杂度会变化吗?如果是这样,是好是坏?

编辑1:尝试使用比较器。有些事情似乎不对劲。返回错误,例如无法从字符串转换为int,反之亦然。固定的

编辑2:我在if(数组[low].compareTo(数组[high])行得到NullPointerException

这是错误:

null  null  null  null  null  
Exception in thread "main" java.lang.NullPointerException
    at Merge.mergeSort_srt(Merge.java:28)
    at Merge.Sort(Merge.java:15)
    at Sort.main(Sort.java:73)

import java.io.File;


public class Merge 
{
    public void Sort (LinkedList listIn, int size) throws Exception
    {
        String[] mergeArray = new String[size] ;
        String textContent = null ;
        File outputFile ;

         for(int i = 0; i < mergeArray.length; i++)
           System.out.print( mergeArray[i]+"  ");
           System.out.println();
           mergeSort_srt(mergeArray,0, mergeArray.length-1);
           System.out.print("Values after the sort:\n");
           for(int i = 0; i <mergeArray.length; i++)
           System.out.print(mergeArray[i]+"  ");
           System.out.println();
           System.out.println("PAUSE");
    }


     public static void mergeSort_srt(String array[],int lo, int n)
     {
           int low = lo;
           int high = n;
           if (array[low].compareToIgnoreCase(array[high]) >= 0)
           {
               return;
           }

           int middle = ((n+1)/ 2);
           mergeSort_srt(array, low, middle);
           mergeSort_srt(array, middle + 1, high);
           int end_low = middle;
           int start_high = middle + 1;
           while ((array[low].compareToIgnoreCase(array[end_low]) <= 0) && (array[start_high].compareToIgnoreCase(array[high]) <= 0))
           {
               if(array[low].compareToIgnoreCase(array[start_high]) < 0)
               {
                   low++;
               }
               else
               {
                   String Temp = array[start_high];
           for (int k = start_high- 1; k >= low; k--)
           {
               array[k+1] = array[k];
           }
           array[low] = Temp;
           low++;
           end_low++;
           start_high++;
           }
           }
     }

}

共有1个答案

乜璞瑜
2023-03-14

这取决于您希望对字符串进行排序的方式,但是字符串的compareTo方法将帮助您实现这种排序:

返回:如果参数字符串等于此字符串,则返回值0;如果该字符串在字典上小于字符串参数,则该值小于0;如果该字符串在词典上大于字符串参数,则该值大于0。

 类似资料:
  • 我在名为的类中有一个链表,它包含以下属性: 我有另一个类,它是“实际列表”,它只包含对列表头部的引用,这个类被称为“文本列表”,它接收一个字符串,并假设将该字符串的每个单词排序在列表中。例如,对于句子: 链接列表如下所示: 箭头就像指向列表中下一个节点的指针。 我想先把所有的单词放在一个链表中(类),然后做一个MERGE SORT来对链表中的单词进行排序。 我想做的是采用拆分方法将列表拆分为两个列

  • 我正在玩排序数组,我弄清楚了如何对int数组进行合并排序。但是我不知道合并字符串数组。在正常排序时,对字符串数组进行排序很容易,但合并排序不同。我到目前为止所做的代码如下,正在处理int数组。

  • 我有一个练习,我必须在链表中插入一个字符串。假设字符串如下所示: 在合并排序之后,链表应该是这样的: 问题是在我的合并排序代码中,我收到以下内容: 所有的单词都被排序,但第一个单词(原始列表的头部)不是。 我有两个类:TextList和WordNode。 WordNode类有两个属性: TextList类只有一个属性:链接列表头的地址: 我有一个构造函数,在其中我将字符串随机插入到一个链表中。最后

  • 对于这个项目,我得到了一个字符串数组和一个整数数组。int[1]是字符串[1]的排名。我需要使用mergesort按1到n的顺序对int数组进行排序,我在下面已经完成了这项工作。但是当int数组被移动时,我还需要切换字符串数组的位置,以便它们都被排序,如果这有意义的话?我不知道我的编码有什么问题,甚至我的想法是否真的有效,但我一直在stringSorted[k]=stringRight[j]上得到

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

  • 双向合并排序与递归合并排序有何不同? 假设在合并排序中有5个数字需要排序8,9,1,6,4,我们按如下步骤1进行划分:{8,9,1}{6,4} 步骤2:{8,9}{1}{6}{4} 步骤3:{8}{9}{1}{6}{4} 现在合并 步骤4:{8,9}{1}{4,6} 步骤5:{1,8,9}{4,6} 第六步:{1,4,6,8,9} 但在双向合并排序中,我们将数组分为两个元素(但根据维基百科,在合并