とうふ荘の手記てき!

プログラムとか

【C言語】自作ソート関数が配列を並べ替える様を眺める

概要

勉強でソート関数を作ったのですが、それだけだと味気なかったので、手塩にかけた関数がソートする様を見ることのできる関数を作りました。

アルゴリズムによっては対応できないものがあったり、並べ替える対象を決める処理を視覚化できるわけではないので、実用性はほぼありません。観賞用です。
(対応するのもint型の配列を並べ替えるものです。)  

使用例

バブルソート

f:id:tofu-so-shioaji:20190101161710g:plain
バブルソート

クイックソート

f:id:tofu-so-shioaji:20190101161719g:plain
クイックソート

ソースコード

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include "sort_visualize.h"
#define ARRAY_NUM 10

void bubble_sort(int*, int);

/*
int型配列を監視して、ソートの様子を表示するプログラム
*/
int main() {
    int arr[ARRAY_NUM] = { 24, 33, 22, 10, 22, 12, 55, 10, 100, 12 };
    start_sort(bubble_sort, arr, ARRAY_NUM);

    return 0;
}

/*一般的なバブルソート*/
void bubble_sort(int* arr, int arr_num) {
    for (int i = 0; i < arr_num; i++) {
        for (int j = 0; j < arr_num - i - 1; j++) {
            if (arr[j] > arr[j + 1]) {
                visualize_swap(arr + j, arr + j + 1);  /*入れ替え*/
            }
        }
    }

    return;
}
ソースコード・用法
  1. 下のソースコードsort_visualize.csort_visualize.をインクルードします。
  2. 自作のソート関数内で入れ換えるタイミングでインクルードした入れ替え関数visualize_swapを用いて入れ換えるように作ります。
  3. 作成した関数と入れ換える対象となる配列とその要素数をインクルードしたstart_sort関数に引数として渡して実行します。

gist0e2ed927b2407ab720ace9bc59f2c375

Go言語でも書いてみたいなぁ