为什么我的排序循环似乎在不应该追加元素的位置?

2022-08-31 13:55:09

我正在尝试使用对字符串数组进行排序。这是我的代码:compareTo()

static String Array[] = {" Hello ", " This ", "is ", "Sorting ", "Example"};
String temp;

public static void main(String[] args)
{

   for (int j=0; j<Array.length;j++)
   {
       for (int i=j+1 ; i<Array.length; i++)
       {
           if (Array[i].compareTo(Array[j])<0)
           {
               String temp = Array[j];
               Array[j] = Array[i];
               Array[i] = temp;
           }
       }
       System.out.print(Array[j]);
   }
}

现在输出是:

Hello  This Example Sorting is

我得到的是结果,但不是我想要得到的结果,它们是:

Hello This Example Is Sorting

如何调整代码以正确排序字符串数组?


答案 1

您的输出是正确的。在开头表示“Hello”和“This”的白色字符。

另一个问题是你的方法论。使用方法:Arrays.sort()

String[] strings = { " Hello ", " This ", "Is ", "Sorting ", "Example" };
Arrays.sort(strings);

输出:

 Hello
 This
Example
Is
Sorting

这里数组的第三个元素“is”应该是“Is”,否则它将在排序后排在最后。因为排序方法在内部使用 ASCII 值对元素进行排序。


答案 2

除了这里发布的替代解决方案(这些解决方案是正确的)之外,没有人通过解决代码中的问题来实际回答您的问题。

看起来好像您正在尝试实现选择排序算法。我不会在这里详细介绍排序的工作原理,但我提供了一些链接供您参考=)

您的代码在语法上是正确的,但在逻辑上是错误的。您仅通过将每个字符串与后面的字符串进行比较来对字符串进行部分排序。这是一个更正后的版本(我保留了尽可能多的原始代码来说明它的“错误”之处):

static  String Array[]={" Hello " , " This " , "is ", "Sorting ", "Example"};
String  temp;

//Keeps track of the smallest string's index
int  shortestStringIndex; 

public static void main(String[] args)  
{              

 //I reduced the upper bound from Array.length to (Array.length - 1)
 for(int j=0; j < Array.length - 1;j++)
 {
     shortestStringIndex = j;

     for (int i=j+1 ; i<Array.length; i++)
     {
         //We keep track of the index to the smallest string
         if(Array[i].trim().compareTo(Array[shortestStringIndex].trim())<0)
         {
             shortestStringIndex = i;  
         }
     }
     //We only swap with the smallest string
     if(shortestStringIndex != j)
     {
         String temp = Array[j];
         Array[j] = Array[shortestStringIndex]; 
         Array[shortestStringIndex] = temp;
     }
 }
}

延伸阅读

这种方法的问题在于其渐近复杂度为 O(n^2)。。简而言之,随着数组大小的增长(接近无穷大),它变得非常慢。您可能希望了解更好的数据排序方法,例如快速排序