Java 字符串插入排序未按预期工作

Java String Insertion Sort Not Working As Desired

我的 objective 是创建一个有效的插入排序,它可以使用 main 方法中提供给我们的数组来处理字符串和整数。对于这个例子,我称之为列表。

public class insort{

public static void main(String[]list){
  sort(list);
  printsort(list);
}//main

public static void sort(String[]list){
  for (int index = 1; index < list.length; index++){
    int key = list[index];
    int position = index;
    while (position > 0 && key.compareTo(list[position-1]) < 0){
        list[position] = list[position-1];
        position--;
    }//while
  list[position] = key;
 }//for
}//sort

public static void printsort(String[]list){
  while ( i < list.length){
    System.out.print(i);
  }//while
 }//printsort
}//insort

你把两件事搞混了。对 intInteger 对象进行排序比对 String 对象进行排序要容易得多(尤其是您需要确保 String[] list 仅包含数字),但是如果您想要要对 String 对象进行排序,您需要更改几件事:

  1. 您尝试将对 String 对象的引用分配给原始变量 int:

    int key = list[index];
    

    您可以将其更改为:

    int key = Integer.valueOf(list[index]);
    

    或将列表从 String[] 更改为 int[]

  2. 您尝试在原始变量 int:

    上使用 compareTo() 方法
    int key = list[index];
    (key.compareTo(list[position-1])) < 0
    

    原始变量没有方法。你可以解决1和2 使用 Integer 对象而不是 int 变量的问题:

    Integer key = Integer.valueOf(list[index]);
    

    或者,如果您想继续使用 int 个变量,请尝试使用:

    key < list[position-1]
    

    而不是:

    (key.compareTo(list[position-1])) < 0
    
  3. 你的while循环是错误的:

    while ( i < list.length){
        System.out.print(i);
    }//while
    

    试试:

    for(String element : list){
        System.out.println(element);
    }
    

    打印list的每个元素。

您还更改了 main 方法,从 main(String[] args) 更改为 main(String[] list),并尝试对 String[] list 使用排序。您应该创建新的 String[] 数组,并尝试使用它,例如:

String[] list = {"4","6","1","8"};
sort(list);

成功编译需要注意的一些事项:

  1. 'printsort'方法中的'i'没有声明和初始化。在开始 while 循环之前,你需要像 int i=0 这样的东西。

  2. 同时while循环变量需要在循环内部更新以满足结束条件。结束条件将帮助您阻止循环进入无限循环。所以在 System.out.print() 之后需要一个 i++

  3. 在 System.out.print() 中,您传递变量 i,它将打印从 0 到长度 1 的数字,而不是列表数组中的字符串。所以你需要像 System.out.print(list[i]).

  4. 这样的东西
  5. 在 'sort' 方法中,您有 int key = list[index],RHS 将 return String 对象,而不是 LHS 上的 int。 So String key = list[index] 就是你需要的。

我还没有检查插入排序是否正常工作的代码。只是指出了一些语法错误,将帮助您编译代码。

祝一切顺利:)