2012-04-19 2 views
1

Я пытаюсь реализовать различные типы сортировки в программе, над которой я работаю. Пока мне удалось сортировать целые числа. Какие изменения необходимо внести, чтобы этот (слияние) код сортировал массив String вместо int one? Возможно ли временная сложность? если да, то лучше или хуже?Сортировка строк Сортировка

EDIT 1: попытался использовать compareTo. что-то не кажется правильным. Ошибки возвращаются, например Невозможно преобразовать из строки в int и наоборот. ИСПРАВЛЕНО

EDIT 2: im получение NullPointerException в строке if (array [low] .compareTo (массив [высокий])> = 0). Предложения всегда приветствуются.

Это ошибка:

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++; 
      } 
      } 
    } 

} 
+0

Дона Если вы отредактируете сообщение, не ставьте слово EDIT в заголовок. Редактирование является нормой, а не исключением в Stack Overflow. – teukkam

+0

Извините, что – serge

ответ

6

Это зависит от того, как вы хотите, чтобы отсортировать строки, но метод compareTo из String поможет вам достичь такой сортировки:

Returns: the value 0 if the argument string is equal to this string; a value less than 0 if this string is lexicographically less than the string argument; and a value greater than 0 if this string is lexicographically greater than the string argument.

+0

поэтому вместо if (array [low] serge

+1

@ voth1234 'if (array [low] .compareTo (array [start_high]) <0)' будет означать, что 'array [low]' is * inferior * to 'array [start_high ] ' – talnicolas

+0

я вижу. я постараюсь сделать это, и если у меня будет проблема, я отправлю обратно. спасибо – serge

Смежные вопросы