1

私は、作業中のプログラムにさまざまな種類のソートを実装しようとしています。これまでのところ、整数を並べ替えることができました。この(マージ)コードでint配列ではなくString配列を並べ替えるには、どのような変更を加える必要がありますか?時間計算量は異なりますか?もしそうなら、良くも悪くも?

編集1:compareToを使用しようとしました。何かが正しくないようです。エラーが返されます。たとえば、stringからintに、またはその逆に変換できません。修繕

編集2:行if(array [low] .compareTo(array [high])> = 0)で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++;
           }
           }
     }

}
4

1 に答える 1

6

文字列を並べ替える方法によって異なりますが、文字列compareToのメソッドは、その種類の並べ替えを実現するのに役立ちます。

戻り値: 引数文字列がこの文字列と等しい場合は値 0。この文字列が文字列引数より辞書的に小さい場合は 0 より小さい値。この文字列が文字列引数よりも辞書的に大きい場合は、0 より大きい値。

于 2012-04-19T16:24:28.977 に答える