2017-01-10 6 views
0

У меня есть строки, отсканированные от пользователя. Следующий шаг - сортировать массив по длине текста, я не знаю, что я делаю неправильно, иногда он работает.Быстрое сортирование по длине строки в массиве

public static void quickSort(String[] subtitles, int start, int end) { 
    int i = start; 
    int j = end; 
    if (j - i >= 1) { 
     String pivot = subtitles[i]; 
     while (j > 1) { 
      while (subtitles[i].compareTo(pivot) <= 0 && i < end && j > i) 
       i++; 

      while (subtitles[j].compareTo(pivot) >= 0 && j > start && j >= i) 
       j--; 

      if (j > i) 
       swap(subtitles, i, j); 
     } 

     swap(subtitles, start, j); 
     quickSort(subtitles, start, j - 1); 
     quickSort(subtitles, j + 1, end); 
    } else 
     return; 
} 

public static void swap(String[] a, int i, int j) { 
    String tmp = a[i]; 
    a[i] = a[j]; 
    a[j] = tmp; 
} 

public static void main(String[] args) { 
    Scanner scan = new Scanner(System.in); 
    int amountStrings = 3; 
    String[] subtitles = new String[amountStrings]; 
    System.out.println("insert "); 
    for (int i = 0; i < amountStrings; i++) { 
     subtitles[i] = scan.next(); 
    } 

    System.out.println("--------"); 

    quickSort(subtitles, 0, subtitles.length - 1); 

    for (int i = 0; i < subtitles.length; i++) { 
     System.out.print(subtitles[i] + " "); 
    } 

Некорректное:

В: asdzxc ASD ZXC

Выход: ASD asdzxc ZXC

Правильно:

В: SDF sdfsfwer сек Out:

s sdf sdfsfwer

+1

Что произошло при попытке отладки? – shmosel

ответ

1

Хорошо, я просмотрел ваш код и сделал два новых метода. Один сортирует массив в алфавитном порядке и один сортирует, подсчитывая количество букв в каждом слове массива. Это зависит от вас, какие методы подходят вам хорошо. Протестировано и работает.

import java.util.Arrays; 
import java.util.Comparator; 
import java.util.Scanner; 

public class Subtitles { 

    public static void sortAlfabetical(String x[]) { 
     int j; 
     boolean found = true; // will determine when the sort is finished 
     String temp; 

     while (found) { 
      found = false; 
      for (j = 0; j < x.length - 1; j++) { 
       if (x[j].compareToIgnoreCase(x[j + 1]) > 0) { // ascending sort 
        temp = x[j]; 
        x[j] = x[j + 1]; // swap 
        x[j + 1] = temp; 
        found = true; 
       } 
      } 
     } 

     for (int i = 0; i < x.length; i++) { 
      System.out.print(x[i] + " "); 
     } 
    } 



    public static void compare(String[] arrayOne) { 

     Arrays.sort(arrayOne, new Comparator<String>() { 

      @Override 
      public int compare(String o1, String o2) { 
       return o1.length() - o2.length(); 
      } 
     }); 

     for (String s : arrayOne) { 
      System.out.print(s + " "); 
     } 

    } 




    public static void main(String[] args) { 
     Scanner scan = new Scanner(System.in); 
     int amountStrings = 3; 
     String[] subtitles = new String[amountStrings]; 
     System.out.println("insert "); 
     for (int i = 0; i < amountStrings; i++) { 
      subtitles[i] = scan.next(); 
     } 

     System.out.println("--------"); 


     System.out.print("Sorting alphabetical: "); 
     sortAlfabetical(subtitles); 
     System.out.println(); 


     System.out.println("==========================="); 
     System.out.print("Sorting by word length: "); 
     compare(subtitles); 


    } 
} 
+0

ОК, если я пишу автомобили, слон, мальчик его работает, но когда я перехожу на слон, мальчик, машины он не работает – llooll

+0

изменен. Проверь сейчас. это будет работать – zypa

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

  • Нет связанных вопросов^_^