插入排序pt2 -Hackerrank

时间:2017-02-09 04:52:13

标签: java sorting

有人可以检查我的代码,看看为什么最后一个索引没有按预期工作?关于如何改进这一点的任何建议都非常感谢。

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

您的输出(标准输出)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编译器消息错误答案

1 个答案:

答案 0 :(得分: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);
        }
    }