バブルソート(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;
}
あとで動作を確認しようと思った時にコピペで済ませるため、実行箇所や、前処理も含めて記載しておいた。