使用冒泡排序对Java中的名称数组按字母顺序排序

问题描述 投票:0回答:2

我一直在尝试解决此错误,但是我无法解决它。以下程序的目的是使用冒泡排序按字母顺序排列名称数组。例如,如果名称为[“ Bob Joe”,“ Bob Frank”和“ Bob Johnson”],则正确排序的数组将为[“ Bob Frank”,“ Bob Joe”,“ Bob Johnson”]。

我面临的主要挑战是比较name.charAt(0)之后的任意两个字符串。如果仅在1个特定的索引点比较任何2个字符串的字符,则我的代码有效。但是,如果如果两个字符串的索引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,则代码将运行并完成其预期的工作。但是,如果最小值保持动态,程序将无法运行。我试图找出为什么会这样,以及解决方法是什么。任何帮助,将不胜感激!

java arrays sorting bubble-sort
2个回答
0
投票

您可以简单地使用compareTo()和一个临时变量进行比较和存储

https://onlinegdb.com/Bk-iB-hs8

我已经通过上面的链接编写了代码


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 = length1 > length2 ? length2 : 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;
               } else if ((int) names[a].toLowerCase().charAt(b) == (int) names[a + 1].toLowerCase().charAt(b)) {
                  // if the letter is the same go for the next
                  continue;
               } else {
                  // if it's already in the right position - stop.
                  break;
               }
            }
         }
      }
   }
© www.soinside.com 2019 - 2024. All rights reserved.