2017-02-09 48 views
0

有人可以檢查我的代碼,爲什麼最後一個索引不按預期工作?任何意見,如何改善這是非常感謝。插入排序pt2 -Hackerrank

import java.io.*; 
import java.util.*; 

public class Solution { 

public static void insertionSortPart2(int[] ar) {  
int key; 
int seen; 

    for (int i = 0 ; i < ar.length-1; i++){ 
     key = ar[i]; 
     seen = i; 

     while (seen <ar.length-1 && ar[seen+1]<key){ 

      ar[seen]= ar[seen+1]; 
      seen = seen+1; 
     } 

     ar[seen]=key; 
      printArray(ar); 
    } 
} 



public static void main(String[] args) { 
    Scanner in = new Scanner(System.in); 
    int s = in.nextInt(); 
    int[] ar = new int[s]; 
    for(int i=0;i<s;i++){ 
     ar[i]=in.nextInt(); 
    } 
    insertionSortPart2(ar);  

}  
private static void printArray(int[] ar) { 
    for(int n: ar){ 
    System.out.print(n+" "); 
    } 
    System.out.println(""); 
} 
} 

輸入(stdin)6 1 4 3 5 6 2

你的輸出(stdout)1 4 3 5 6 2 1 3 4 5 6 2 1 3 4 5 6 2 1 3 4 5 6 2 1 3 4 5 2 6

預期輸出1 4 3 5 6 2 1 3 4 5 6 2 1 3 4 5 6 2 1 3 4 5 6 2 1 2 3 4 5 6的編譯器的消息錯誤答案

+0

你通過這個曠古調試器? – nhouser9

回答

0

你正在做錯誤的方式。再次閱讀第1部分。

假設第一個元素被排序。然後嘗試在排序列表中逐個插入元素。

試試這個:

public static void insertionSortPart2(int[] ar) { 
     int key; 
     int seen; 

     for (int i = 1 ; i < ar.length; i++){ 
      key = ar[i]; 
      seen = i; 

      while (seen > 0 && ar[seen-1] > key) { 
       ar[seen] = ar[seen-1]; 
       seen = seen - 1; 
      } 

      ar[seen]=key; 
      printArray(ar); 
     } 
    }