挿入ソートをC言語で書いた

挿入ソートのコードを書きました。

このアルゴリズムはn個の数字が入った配列がある時、0からnまでループを回し、自分より右の数のうち最小のものと自分を入れ替えるアルゴリズムです。

アルゴリズムの説明は別のサイトを見てもらった方が分かりやすいと思います。。。

以下がソースコードです。C言語で書いています。

#include <stdio.h>

#define NUMBER_OF_ITEMS 10

int *selection_sort (int messy_array[NUMBER_OF_ITEMS]) {
  int *sorted_array = messy_array;
  for (int i = 0; i< NUMBER_OF_ITEMS - 1; i++) {
    int minimum_index = i;
    for (int j = i + 1; j < NUMBER_OF_ITEMS; j++) {
      if (sorted_array[j] < sorted_array[minimum_index]) {
        minimum_index = j;
      }
    }

    // swap
    int temp = sorted_array[i];
    sorted_array[i] = sorted_array[minimum_index];
    sorted_array[minimum_index] = temp;
  }
  return sorted_array;
}

int main (void) {
  int messy_array[NUMBER_OF_ITEMS] = { 1, 10, 3, 32, 16, 19, 22, 9, 12, 17};
  int *sorted_array = selection_sort(messy_array);
  for (int i = 0; i < NUMBER_OF_ITEMS; i++) {
    printf("%d ", sorted_array[i]);
  }
  return 0;
}

地味にC11の機能を使ったので-std=c11オプションをつけてコンパイルします。

$  gcc -std=c11 -o selection selection.c
$ ./selection
1 3 9 10 12 16 17 19 22 32