Использование пузырьковой сортировки для сортировки по алфавиту массива имен в Java - PullRequest
0 голосов
/ 27 мая 2020

Я уже некоторое время пытаюсь исправить эту ошибку, но никак не могу ее решить. Цель приведенной ниже программы - использовать пузырьковую сортировку для упорядочивания массива имен в алфавитном порядке. Например, если имена [«Боб Джо», «Боб Франк» и «Боб Джонсон»], правильно отсортированный массив будет [«Боб Франк», «Боб Джо», «Боб Джонсон»].

Основная проблема, с которой я столкнулся, - это сравнение любых двух строк после name.charAt (0). Если я сравниваю только символы любых двух строк в 1 определенной c индексной точке, мой код работает. Однако, если я попытаюсь заставить сравнение переместиться за индекс 0, если индекс 0 обеих строк равен друг другу, моя программа больше не работает.

Код показан ниже

public static void sortAlpha (String names[])
    {
        for (int i = 0 ; i < names.length - 1 ; i++)
        {
            for (int a = 0 ; a < names.length - 1 - i ; a++)
            {

                int length1 = names [a].length ();
                int length2 = names [a + 1].length ();

                int min = 1; 

                if (length1 > length2)
                {
                    min = length2;
                }
                else
                {
                    min = length1;
                }

                for (int b = 0 ; b < min ; b++)
                {

                    if ((int) names [a].toLowerCase ().charAt (b) > (int) names [a + 1].toLowerCase ().charAt (b))
                    {
                        String tempName = names [a];

                        // sort:
                        names [a] = names [a + 1];
                        names [a + 1] = tempName;

                        break;
                    }

                }

            }
        }
    }

Если я просто установлю минимальное значение равным 1, код будет запущен и выполнит свою работу. Однако, если минимальное значение остается динамическим c, программа не работает. Я пытаюсь понять, почему это так, и что исправить. Любая помощь будет оценена!

Ответы [ 3 ]

0 голосов
/ 27 мая 2020

Проверьте это.

   public static void sortAlpha(String names[]) {
      for (int i = 0; i < names.length - 1; i++) {
         for (int a = 0; a < names.length - 1 - i; a++) {
            int lengthLeft = names[a].length();
            int lengthRight = names[a + 1].length();
            int minLength = lengthLeft > lengthRight ? lengthRight : lengthLeft;
            for (int b = 0; b < minLength; b++) {
               int letterLeft = (int) names[a].toLowerCase().charAt(b);
               int letterRight = (int) names[a + 1].toLowerCase().charAt(b);
               if (letterLeft > letterRight) {
                  String tempName = names[a];
                  // sort:
                  names[a] = names[a + 1];
                  names[a + 1] = tempName;
                  break;
               } else if (letterLeft == letterRight) {
                  // if the letters are the same go for the next letters
                  continue;
               } else {
                  // if it's already in the right position - stop.
                  break;
               }
            }
         }
      }
   }
0 голосов
/ 27 мая 2020

Используйте это

for (int i = 0; i < count; i++) 
        {
            for (int j = i + 1; j < count; j++) { 
                if (str[i].compareTo(str[j])>0) 
                {
                    temp = str[i];
                    str[i] = str[j];
                    str[j] = temp;
                }
            }
        }
0 голосов
/ 27 мая 2020

Вы можете просто использовать compareTo () и временную переменную для сравнения и сохранения

Scanner sc = new Scanner(System.in);
String n[]= new String[5];
System.out.println("Enter the String");
for(int k = 0;k<5;k++) {
    n[k] = sc.nextLine();
}
String temp;
System.out.println("sorted order:");
for (int j = 0; j < n.length; j++) {
   for (int i = j + 1; i < n.length; i++) {
     if (n[i].compareTo(n[j]) < 0) {
        temp = n[j];
        n[j] = n[i];
        n[i] = temp;
    }
}
System.out.println(n[j]);
...