插入排序字符串数组,排序不对

Insertion Sort String Array, not sorting right

你好,这是我的字符串数组插入排序方法。它向控制台返回虚假结果。主要只是一个数组元素一遍又一遍。有什么需要改的大大帮忙appreciated.Thank你们

 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;

      }
       }

检查代码是否正常工作

 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");
    }

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

你原来的 a[j+1] 会丢失,你只是简单地替换它,没有移动它/存储它,它只是简单地被 a[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]);
            }
      }
 }

下面的代码有效。

 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;