插入排序字符串数组,而不是右排序

时间:2016-03-24 05:46:39

标签: arrays sorting insertion-sort

您好这是我的String Array插入排序方法。它将伪造的结果返回到控制台。主要只是一个数组元素一遍又一遍。非常感谢任何需要改变的帮助。谢谢。

 public static void insertionSort(String[] a, int count) {
      int i, j;
      String Value;
      for (i = 1; i < count; i++) {
            Value = a[i];
            j = i - 1 ;
            while (j >= 0 && a[j].compareTo(Value)> 0) {
                  a[j+1] = a[j];
                  j=j-1;
            }
            a[i+1] = Value;

      }
       }

3 个答案:

答案 0 :(得分:3)

检查代码是否正常

 public static void insertionSort(int array[]) {
        int n = array.length;
        for (int j = 1; j < n; j++) {
            int key = array[j];
            int i = j-1;
            while ( (i > -1) && ( array [i] > key ) ) {
                array [i+1] = array [i];
                i--;
            }
            array[i+1] = key;
            printNumbers(array);
        }

并打印数字我使用函数printNumbers(array)

 private static void printNumbers(int[] input) {

        for (int i = 0; i < input.length; i++) {
            System.out.print(input[i] + ", ");
        }
        System.out.println("\n");
    }

答案 1 :(得分:1)

以下代码有效。

 public static void insertionSort(String[] a, int count) {
          int i, j;
          String Value;
          for (i = 1; i < count; i++) {
                Value = a[i];
                j = i;
                while (j > 0 && a[j-1].compareTo(Value)> 1) {
                      a[j] = a[j-1];
                      j--;
                }
                a[j] = Value;

答案 2 :(得分:0)

问题是a[j+1] = a[j];

你原来的[j + 1]会丢失,你只是简单地替换它,不移动它/存储它,它只是简单地被[j]取代而迷路了......

我会修改您的代码,如下所示: 找到要插入的当前值的位置,将其与该位置的元素交换,然后将该元素交换回正确的位置

 public static void insertionSort(String[] a, int count) {
      int i, j;
      String Value;
      for (i = 1; i < count; i++) {
            Value = a[i];
            j = i - 1 ;
            int p = i;
            while (j >= 0 && a[j].compareTo(Value)> 0) {    
                p = j--;
            }
            // p now is correct position to be inserted
            swap(a[p], a[i]);
            // Now loop the original a[p] back to a[p+1]
            for(int z = i; z > p; z--){
                 swap(a[z], a[z-1]);
            }
      }
 }