バブルソート(bubbleSort)を10種類の言語で書いてみた

前回、linearSearch(線形探索)を10の言語で書いが、今回はバブルソートを書いてみた。

何故書くか?は前前回書いたので、以下、即本題。

以下は簡単な仕様。

  • bubbleSortメソッドor関数を定義
  • 数値の入った配列を引数にする
  • 昇順にソートする

各言語間のListオブジェクトや、ビルトインの配列操作ヘルパーの違いも気になるけれども、今は基本的な構文の違い等の方が興味があるので、そっちを優先した。

実行環境は今までと同じく、coding groundを使用。

JavaScript

function bubbleSort(arr) {
    for (let i = 0, len = arr.length-1; i < len; i++) {
        for (let j = len; j > i; j--) {
            if (arr[j] < arr[j-1]) {
                let tmp = arr[j];
                arr[j] = arr[j-1];
                arr[j-1] = tmp;
            }
        }
    }
    return arr;
}
console.log(bubbleSort([104, 865, 413, 541, 304, 354, 165, 150]));

PHP

function bubbleSort($arr) {
    for ($i = 0, $len = (count($arr)-1); $i < $len; $i++) {
        for ($j = $len; $j > $i; $j--) {
            if ($arr[$j] < $arr[$j-1]) {
                $tmp = $arr[$j];
                $arr[$j] = $arr[$j-1];
                $arr[$j-1] = $tmp;
            }
        }
    }
    return $arr;
}

print_r(bubbleSort([104, 865, 413, 541, 304, 354, 165, 150]));

Perl

use strict;
use warnings;

my @arr = (104, 865, 413, 541, 304, 354, 165, 150);
my @result = &bubbleSort(\@arr);
print join(",", @result);
sub bubbleSort {
    my ($arr) = @_;
    for (my $i = 0; $i < $#arr; $i++) {
        for(my $j = $#arr; $j > $i; $j--) {
            if ($arr[$j] < $arr[$j-1]) {
                my $tmp = $arr[$j];
                $arr[$j] = $arr[$j-1];
                $arr[$j-1] = $tmp;
            }
        }
    }
    return @arr;
}

Python

def bubbleSort(arr):
    for i in range(len(arr)):
        j = len(arr)-1
        while j > i:
            if arr[j] < arr[j-1]:
                tmp = arr[j]
                arr[j] = arr[j-1]
                arr[j-1] = tmp
            j -= 1
    return arr

print(bubbleSort([104, 865, 413, 541, 304, 354, 165, 150]))

Ruby

def bubbleSort(arr)
    i = 0
    while i < arr.size do
        j = arr.size
        while j > i do
            if arr[j] < arr[j-1]
                tmp = arr[j]
                arr[j] = arr[j-1]
                arr[j-1] = tmp
            end
            j -= 1
        end
        i += 1
    end
    return arr
end

print bubbleSort([104, 865, 413, 541, 304, 354, 165, 150])

Go

package main

import "fmt"

func main() {
    fmt.Println(bubbleSort([]int{104, 865, 413, 541, 304, 354, 165, 150}));
}
func bubbleSort(arr []int) []int {
    len := len(arr)-1;
    for i := 0; i < len; i++ {
        for j := len; j > i; j-- {
            if arr[j] < arr[j-1] {
                tmp := arr[j];
                arr[j] = arr[j-1];
                arr[j-1] = tmp;
            }
        }        
    }
    return arr;
}

Kotlin

fun main(args: Array<String>) {
    var result = bubbleSort(arrayOf(104, 865, 413, 541, 304, 354, 165, 150))
    for(i in result) println(i)
}
fun bubbleSort(arr: Array<Int>): Array<Int> {
    for (i in arr.indices) {
    println(i)
        var j = arr.size-1
        while (j > i) {
            if (arr[j] < arr[j-1]) {
                var tmp = arr[j]
                arr[j] = arr[j-1]
                arr[j-1] = tmp
            }            
            j--
        }
    }
    return arr
}

Swift

func bubbleSort(a: [Int]) -> [Int] {
    var arr = a // 引数の配列は定数となってしまう
    for i in 0 ..< arr.count {
        var j = arr.count-1
        while j > i {
            if arr[j] < arr[j-1] {
                let tmp = arr[j]
                arr[j] = arr[j-1]
                arr[j-1] = tmp
            }
            j -= 1
        }
    }
    return arr
}

print(bubbleSort(a: [104, 865, 413, 541, 304, 354, 165, 150]))

C#

using System.IO;
using System;

class Program
{
    static void Main()
    {
        int[] arr = { 104,865,413,541,304,354,165,150 };
        Console.WriteLine(string.Join(", ", bubbleSort(arr)));
    }

    static int[] bubbleSort(int[] arr) {
        int len  = arr.Length - 1;
        for (int i = 0; i < len; i++) {
            for (int j = len; j > i; j--) {
                if(arr[j] < arr[j-1]) {
                    int tmp = arr[j];
                    arr[j] = arr[j-1];
                    arr[j-1] = tmp;
                }
            }
        }
        return arr;
    }
}

C

#include <stdio.h>

void bubbleSort(int arr[], int len)
{
    len -= 1;
    for (int i = 0; i < len; i++) {
        for(int j = len; j > i; j--){
            if(arr[j] < arr[j-1]){
                int tmp = arr[j];
                arr[j] = arr[j-1];
                arr[j-1] = tmp;
            }
        }
    }
}

int main()
{
    int arr[] = {104, 865, 413, 541, 304, 354, 165, 150};
    bubbleSort(arr, 8);
    for (int i = 0; i < 8; i++) {
        printf("%d\n", arr[i]);    
    }
    return 0;
}

あとで動作を確認しようと思った時にコピペで済ませるため、実行箇所や、前処理も含めて記載しておいた。