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

时间:2015-11-02 13:09:53

标签: java insertion-sort

我的目标是创建一个工作插入排序,它可以使用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

2 个答案:

答案 0 :(得分:1)

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

  1. 'printsort'方法中的'i'未声明和初始化。在开始while循环之前,您需要int i=0之类的东西。

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

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

  4. 之类的东西
  5. 在'sort'方法中,您有int key = list[index],RHS将返回一个String对象,而不是您在LHS上的int。 So String key = list[index]就是你所需要的。

  6. 我没有检查代码是否正确插入排序。刚刚指出了一些可以帮助你编译代码的语法错误。

    一切顺利:)

答案 1 :(得分:0)

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

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

    int key = list[index];
    

    您可以将其更改为:

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

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

  2. 您尝试在原始变量compareTo()上使用int方法:

    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的每个元素。

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

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