2014-09-02 56 views
-3

我想知道如何在输出中显示插入排序的逐步过程。如果我把20,5,9,8,7的输出是5,7,8,9,20。它没有显示一步一步的过程,我该如何显示?这里是我的代码:插入排序如何打印整个阵列

for(i=0; i<r; i++) { 
    System.out.print(data[i]+"\t"); 
} 

System.out.print("\n"); 

for (j=1; j<r;j++) { 
    temp = data[j]; 
    for(i=j-1; i>=0 && temp < data[i]; i--) 
    data[i+1]= data[i]; 
    data[i+1]=temp; 
} 

for(j=0; j<r; j++) { 
    System.out.print(data[j]+"\t"); 
    System.out.print("\n"); 
    break; 
} 
+0

这完全取决于你一步一步的意思。哪些步骤? – 2014-09-02 00:23:44

+0

您可以在每次更改后打印整个列表,您的问题有点含糊。 – Lightor 2014-09-02 00:26:51

+0

遗憾的是,我一直无法得到这段代码来为我排序......也就是说,我无法重现输出。你能发布一个*稍微*更完整的例子吗? http://stackoverflow.com/help/mcve – therealrootuser 2014-09-02 00:31:01

回答

1

其不显示循序渐进的过程,我怎么能证明?

我会使用Arrays.toString(int[])和格式化输出与printf(String, Object...)的组合。类似的,

public static void main(String[] args) { 
    int[] data = { 20, 5, 9, 8, 7 }; 
    System.out.println("Before sort: " + Arrays.toString(data)); 
    sort(data); 
    System.out.println("After sort: " + Arrays.toString(data)); 
} 

public static void sort(int[] data) { 
    int i; 
    for (int j = 1, r = data.length; j < r; j++) { 
     int temp = data[j]; 
     System.out.printf("Sorting %d from pos=%d%n", temp, j); 
     for (i = j - 1; i >= 0 && temp < data[i]; i--) { 
      data[i + 1] = data[i]; 
      System.out.printf("%d is less then %d, shifting up%n", tehmp, 
        data[i]); 
     } 
     System.out.printf("%d moved from pos=%d to pos=%d%n", temp, j, 
       i + 1); 
     data[i + 1] = temp; 
     System.out.printf("After iteration %d: %s%n", j, 
       Arrays.toString(data)); 
    } 
}