Сортировка вставками: вставьте цель в лучшую позицию, которая была сделана до сих пор.

Как и на картинке выше, предполагая, что левая сторона уже отсортирована, он вставляет «x», который находится с правой стороны, в лучшую позицию там.

위의 그림처럼 왼쪽이 정렬되었다고 가정하고 오른쪽에 있는 x를 그 정렬되있는 원소 사이의 가장 적절한 위치에 끼워 넣는 것이다.

/* insertion sort */
int* insertionSort(int * arr, int max) {
  //printAll(arr, 10);
  for (int i = 0; i < max - 1; i++) {
    int tempi = i;
    int tempj = i + 1;
    //printf("arr[%d] : %d \n", i, arr[i]);
    for (int j = i + 1; j > 0; j--) {
      if (arr[i] < arr[j]) { // end
      //printf("next\n\n");
      //printAll(arr, 10);
      break;
      }
      else if (arr[tempi] > arr[tempj]) { // swap
        //printf("%d <-> %d swap!\n\n", arr[tempi], arr[tempj]);
        swap(&arr[tempi], &arr[tempj]);
        tempi--;
        tempj--;
        printAll(arr, 10);
      }
    }
  }
  return arr;
}

референсное видео