public class InsertionSort {
  /** Metoda sortująca liczby */
  public static void insertionSort(int[] list) {
    for (int i = 1; i < list.length; i++) {
      /** Wstawianie list[i] na posortowaną podlistę list[0..i−1], aby
          fragment list[0..i] był posortowany. */
      int currentElement = list[i];
      int k;
      for (k = i - 1; k >= 0 && list[k] > currentElement; k--) {
        list[k + 1] = list[k];
      }

      // Przypisywanie bieżącego elementu do list[k + 1]
      list[k + 1] = currentElement;
    }
  }
  
  /** Metoda testowa */
  public static void main(String[] args) {
    int[] list = {2, 3, 2, 5, 6, 1, -2, 3, 14, 12};
    insertionSort(list);
    for (int i = 0; i < list.length; i++)
      System.out.print(list[i] + " ");
  }
}
