在Java中实现插入排序

时间:2018-11-03 21:37:41

标签: java arrays sorting

我有两个文件,一个是驱动程序,另一个是有两个方法,第一个是插入排序,第二个是打印方法。插入排序应按字典顺序对字符串数组进行排序。

import java.util.Arrays;

公共类实用程序{

public static void insertionSort(String[] array) {
    //TODO

    for ( int i=1  ; i<array.length; i++)
    {
        int j = i;
        String str1 = array[j-1];
        String str2 = array[j];
        while (j>0 && str1.compareTo(str2)>0)
        {
            String t = array[j];
            array[j] = array[j-1];
            array[j-1] =t;
            j = j-1;
        }
    }
}

public static void printArray(String[] array) {

    String t = Arrays.toString(array);
    System.out.println(t);
}

}

这是我的司机

public class Driver {

public static void main(String[] args) {

    String[] names = {"Tom", "Steve","Ann","Zoe","Bob","Moana","Naomi","Kevin","Ryan","Nina","Dora","Wanda","Eric"};

    System.out.println("Unsorted array:");
    Utility.printArray(names);
    System.out.println("Sorted array:");
    Utility.insertionSort(names);
    Utility.printArray(names);




}

}

我试图对数组进行排序,但是我不知道为什么不进行排序,这是因为我的insertSort方法是驱动程序中的某事

这是我尝试遵循的伪代码

for i=1 to length(A)
   j =i
  while j > 0 and A[j-1] > A[j]
    swap A[j] and A[j-1]
    j =j -1
  end while

结束

1 个答案:

答案 0 :(得分:0)

我在您的原始算法中发现了两个错误:

  • 第一个:第二个循环永远不会结束,因为在其内部块中,控制条件没有变化。
  • 第二:再次,第二个循环总是进行相同的比较,因为对比较的字符串不做任何修改。

我的建议

  • 要执行索引循环,请始终使用for形式。在声明维护条件时,只包括一个简单的关系比较。
  • 变量初始化应在其依赖的每次迭代的最内部级别(并且只能进行一次)进行。
  • 复杂条件应通过特定的if来实现。