Cloud9でバブルソート

いろいろ勉強したいことが溜まってきてしまっている今日このごろ、一個ずついろいろ試していきたいと思います。

とりあえず、HerokuGoogle App EngineならHerokuの方が無課金ユーザに優しい気がするのは分かった。

そんなわけで前からやってみたかったCloud9を使用してのC言語のバブルソートを書いてみます。

とりあえずC言語のコンパイル方法とかさっぱり忘れてしまっているのでドットインストールのC言語を見たり私の旧ブログを見たりして思い出します。

ほんでソースコード探検隊のバブルソートをやってみます。

C言語でバブルソート

bubble_sort.c

#include <stdio.h>

#define NUM_ITEMS 7

void bubbleSort(int numbers[], int array_size);
void printArray(int numbers[], int array_size);

int main()
{
  int numbers[NUM_ITEMS] = {6,5,3,1,7,2,4};

  printf("Start:\n");
  printArray(numbers, NUM_ITEMS);
  printf("\n");

  //perform bubble sort on array
  bubbleSort(numbers, NUM_ITEMS);

  printf("Done:\n");
  printArray(numbers, NUM_ITEMS);
  printf("\n");

  return 0;
}


void bubbleSort(int numbers[], int array_size)
{
  int i, j, temp;

  for (i = 0; i < (array_size - 1) ; i++) {
    for (j = (array_size - 1); j > i; j--) {
      printf("compare: %d and %d\n", numbers[j], numbers[j-1]);
      if (numbers[j-1] > numbers[j]) {
        temp = numbers[j-1];
        numbers[j-1] = numbers[j];
        numbers[j] = temp;

        printf("\tswap: ");
        printArray(numbers, array_size);
        printf("\n");
      }
    }
    printArray(numbers, array_size);
    printf("\n");
  }
}

void printArray(int numbers[], int array_size)
{
    int x;
    for (x = 0; x < array_size; x++) {
        printf("%d ", numbers[x]);
    }
}

コンパイルと実行

masasikatano:~/workspace $ gcc -o bubble_sort bubble_sort.c
masasikatano:~/workspace $ ./bubble_sort 
Start:
6 5 3 1 7 2 4 
compare: 4 and 2
compare: 2 and 7
        swap: 6 5 3 1 2 7 4 
compare: 2 and 1
compare: 1 and 3
        swap: 6 5 1 3 2 7 4 
compare: 1 and 5
        swap: 6 1 5 3 2 7 4 
compare: 1 and 6
        swap: 1 6 5 3 2 7 4 
1 6 5 3 2 7 4 
compare: 4 and 7
        swap: 1 6 5 3 2 4 7 
compare: 4 and 2
compare: 2 and 3
        swap: 1 6 5 2 3 4 7 
compare: 2 and 5
        swap: 1 6 2 5 3 4 7 
compare: 2 and 6
        swap: 1 2 6 5 3 4 7 
1 2 6 5 3 4 7 
compare: 7 and 4
compare: 4 and 3
compare: 3 and 5
        swap: 1 2 6 3 5 4 7 
compare: 3 and 6
        swap: 1 2 3 6 5 4 7 
1 2 3 6 5 4 7 
compare: 7 and 4
compare: 4 and 5
        swap: 1 2 3 6 4 5 7 
compare: 4 and 6
        swap: 1 2 3 4 6 5 7 
1 2 3 4 6 5 7 
compare: 7 and 5
compare: 5 and 6
        swap: 1 2 3 4 5 6 7 
1 2 3 4 5 6 7 
compare: 7 and 6
1 2 3 4 5 6 7 
Done:
1 2 3 4 5 6 7 
masasikatano:~/workspace $ 

ここであることに気づきます。

思ったよりC言語がしんどい。

というわけで、なんとなくPythonでも書いてみます。

Pythonでバブルソート

をやる前にCloud9でPythonを選択してワークスペースを作成すると、Python2がデフォルトになるためPython3に変更します。

masasikatano:~/workspace $ sudo mv /usr/bin/python /usr/bin/python2
masasikatano:~/workspace $ sudo ln -s /usr/bin/python3 /usr/bin/python
masasikatano:~/workspace $ python
Python 3.4.3 (default, Nov 17 2016, 01:08:31)
[GCC 4.8.4] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>

OKです。↓のようなファイルを作成します。参考にしたのは、Problem Solving with Algorithms and Data Structures の バブルソート回です。

bubblesort.py

def bubbleSort(alist):                       # defで関数を定義
    for passnum in range(len(alist)-1,0,-1): # range()で8から-1ずつ進み0で終了を指定
        for i in range(passnum):
            if alist[i]>alist[i+1]:          # データ配列の前後を比較して前の数が大きい
                temp = alist[i]              # 一時変数に前のデータを格納
                alist[i] = alist[i+1]        # データ配列の前後を入れ替え
                alist[i+1] = temp

alist = [54,26,93,17,77,31,44,55,20] # ソートするデータの入った配列を定義
bubbleSort(alist)                    # 関数を実行
print(alist)                         # 表示

実行してみます。

masasikatano:~/workspace $ python bubblesort.py 
[17, 20, 26, 31, 44, 54, 55, 77, 93]
masasikatano:~/workspace $ 

うまくいきました。

やっぱPythonの方が楽だ・・

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です