【ディレクターもプログラミングを学ぼう】C言語とJavaScriptでバブルソートを実装してみた

【ディレクターもプログラミングを学ぼう】C言語とJavaScriptでバブルソートを実装してみた

Jack

Jack

こんにちは。ディレクターのJackです。

本職はディレクターなのですが、趣味でプログラミングをやっています。
理由としては、プログラミングやフレームワークの技術が進歩する中、ディレクターでもその技術のメリットやデメリット、実装するロジックのアルゴリズムを理解することは、サービスを開発する上で重要なのでは…と思っています。

最近では、データ構造とアルゴリズムに夢中で、学生時代にお世話になった参考書を読み返し、日々勉強中です。
いやー、プログラミングって楽しいけど難しいですね! エンジニアさんに日々感謝!

新・明解C言語によるアルゴリズムとデータ構造

新・明解C言語によるアルゴリズムとデータ構造

  • 著者柴田 望洋,辻 亮介
  • 価格¥ 2,808(2017/02/03 14:34時点)
  • 出版日2011/09/01
  • 商品ランキング272,893位
  • 単行本472ページ
  • ISBN-104797366249
  • ISBN-139784797366242
  • 出版社ソフトバンククリエイティブ

ディレクターがプログラミングを学ぶメリット

ディレクターがプログラミングを学ぶメリットを自分なりに整理してみます。
今までの経験を踏まえ、今回は2点ご紹介させていただきます。

仕様や設計に関する理解が深まる

打ち合わせやブレスト中に技術的な話になって、「持ち帰ってエンジニアに確認しますね…」という経験はありませんか。Webアプリケーションを開発する上で、プログラミングやサーバなど必要な知識は多岐に渡ります。

ディレクターがプログラミングを学ぶことにより、Webアプリケーションを開発するための手法を学ぶことができ、開発したアプリケーションの動作を理解することができると思います。Webアプリケーションの開発手法を学ぶことで、エンジニアが普段話している技術用語を理解できるようになると思いますし、ざっくりとでも理解できれば仕様策定や設計を円滑に行うことができるようになります。

作り手の気持ちをさらに理解できる

プロジェクトが始まった際に、エンジニアに対して「あの機能が追加になったから、実装よろしく!」なんていう会話もあるかもしれません。ユーザーニーズに応えるために、実装が必要な機能はもちろんあるでしょう。ただ、実際にプログラミングをしたことがある人ではないと、その機能を実装するのにどのくらいの工数と影響範囲があるのか、理解が難しいと思います。

エンジニアをはじめとしたプロジェクトメンバーの気持ちを理解しプロジェクトを進めることが、お客様やユーザーに対して価値を提供できると思います。プログラミングを学び理解することは、ディレクターとって必要なスキルだと思います。

利用するプログラミング言語

さて、ここからが本題です。C言語JavaScriptを利用して、バブルソートを実装してみたいと思います。

C言語とは?

C言語とは、手続き型のコンパイル言語の一種で、1972年にAT&Tベル研究所のデニス・リッチーが主体となって開発されました。このC言語は、汎用性が高く、機械制御やシステム管理など、あらゆる分野に適用できるというメリットがあります。教育機関などでも学習用のプログラミング言語として利用されいてるケースもあります。

JavaScriptとは?

JavaScriptとは…これは説明不要ですかね!
JavaScriptは、インタプリタ型のプログラミング言語で、Web開発で広く利用されているプログラミング言語です。また、node.jsなどの非ブラウザ環境においても使用されている言語です。

Web開発者向け情報サイト「Mozilla Developer Network」でJavaScriptが分かりやすくまとめられています。
JavaScript | Mozilla Developer Network

バブルソートとは?

バブルソートとはソートアルゴリズムの一つです。隣り合う要素の大小を比較しながら整列をさせていきます。
バブルソートの詳しい説明は、下記参考サイトが分かりやすいです。

バブルソート | アルゴリズムとデータ構造 | Aizu Online Judge

ほかにも、

  • クイックソート
  • 挿入ソート
  • ヒープソート

などの言語がありますが、今回はバブルソートのみ実装をしていきます。

実装してみる

C言語編

C言語で実装したバブルソートのプログラムは下記となります。

#include  <stdio.h>

/* ソートするデータの数 */
#define NUM_DATA 10

/* このデータをソート */
int x[] = {10, 5, 54, 12, 11, 9, 6, 13, 86, 99};

/* プロトタイプ宣言 */
void BubbleSort(int x[], int n);
void ShowData(int x[ ], int n);
int main(void);

/* バブルソートを実行する関数 */
void BubbleSort(int x[], int n)
{
    int i, j, temp;

    for (i = 0; i < n - 1; i++) {
        for (j = n - 1; j > i; j--) {
            if (x[j - 1] > x[j]) {
                temp = x[j];
                x[j] = x[j - 1];
                x[j - 1]= temp;
            }
        }	
    }
}
	
/* データを表示する関数 */
void ShowData(int x[], int n)
{
    int i;

    for (i = 0; i < n; i++) {
        printf("%d\t", x[i]);
    }
}

int main(void)
{		
    /* ソート前のデータを表示 */
    printf("ソート前:\n");
    ShowData(x, NUM_DATA);
    printf("\n\n");

    BubbleSort(x, NUM_DATA);

      /* ソート後のデータを表示 */
    printf("ソート後:\n");
    ShowData(x, NUM_DATA);

    return 0;
}

作成したファイルを実行してみる

作成したプログラムを実行するには、下記コマンドを実行します。
gccコマンドを利用してコンパイルが必要となります。

# gcc -o bsort bsort.c
# ./bsort
ソート前:
10	5	54	12	11	9	6	13	86	99
ソート後:
5	6	9	10	11	12	13	54	86	99

無事、昇順にソートすることができましたね。

JavaScript編

JavaScriptで実装したバブルソートのプログラムは下記となります。
私の書き方にもよるのですが、C言語の時よりは記述量は少なくなりました。

/* バブルソート用の関数 */
function BubbleSort(x) {
    var n = x.length;
    for (i = 0; i < n - 1; i++) {
        for (j = n - 1; j > i; j--) {
            if (x[j - 1] > x[j]) {
                temp = x[j];
                x[j] = x[j - 1];
                x[j - 1]= temp;
            }
        }	
    }
    return x;
}

/* main関数 */
function main() {
    var x = [10, 5, 54, 12, 10, 9, 6, 13, 86, 99];
    console.log("ソート前:");
    console.log(x);
    result = BubbleSort(x);
    console.log("ソート後:");
    console.log(result);
}

/* main関数を実行 */
main();

作成したファイルを実行してみる

作成したプログラムを実行するには、下記コマンドを実行します。

% node bsort.js
ソート前:
[ 10, 5, 54, 12, 10, 9, 6, 13, 86, 99 ]
ソート後:
[ 5, 6, 9, 10, 10, 12, 13, 54, 86, 99 ]

JavaScriptで実装したコードも、ちゃんと昇順にソートすることができましたね。

おわりに

本日は、ディレクターがプログラミング言語を学ぶメリットに簡単に触れ、C言語とJavaScriptを利用してバブルソートを実装しました。
次回は、クイックソートを実装して実行時間の比較をしてみたいと思います。
それでは、良いプログラミングライフを!

LIGはWebサイト制作を支援しています。ご興味のある方は事業ぺージをぜひご覧ください。

Webサイト制作の実績・料金を見る

この記事のシェア数

デューサーのJackです。 Web事業部マネージャーも兼務しています。 ディレクター向けの講演依頼はお気軽にご連絡ください。

このメンバーの記事をもっと読む