線形探索(linearSearch)を10種類の言語で書いてみた
前回、hello worldを12の言語で書いた。その続編として、少し難易度を上げてlinearSearch(線形探索)を書いてみた。
何故書くか?は前回書いたので、以下、即本題。
以下は簡単な仕様。
各言語間のListオブジェクトや、ビルトインの配列操作ヘルパーの違いも気になるけれども、今は基本的な構文の違い等の方が興味があるので、そっちを優先した。
実行環境は前回と同じく、coding groundを使用。
JavaScript
function linearSerch(arr, target) {
for(var i = 0, len = arr.length; i < len; i++) {
if(arr[i] === target){
return i;
}
}
return -1;
}
console.log(linearSerch([104, 865, 413, 541, 304, 354, 165, 150], 304));
PHP
function linearSearch($arr, $target) {
for ($i = 0, $len = count($arr); $i <= $len; $i++) {
if ($arr[$i] == $target) {
return $i;
}
}
return -1;
}
echo linearSearch([104, 865, 413, 541, 304, 354, 165, 150], 304);
Perl
use strict;
use warnings;
my @arr = (104, 865, 413, 541, 304, 354, 165, 150);
my $result = &linearSearch(\@arr, 304);
if ($result) {
print($result);
} else {
print('見つかりませんでした');
}
sub linearSearch {
my ($arr, $target) = @_;
for (my $i = 0; $i < @arr; $i++) {
if ($arr[$i] == $target) {
return $i;
}
}
return -1;
}
Python
def linearSearch(arr, target):
for (i, j) in enumerate(arr):
if j == target:
return i
return -1
print(linearSearch([104, 865, 413, 541, 304, 354, 165, 150], 304))
Ruby
def linearSearch(arr, target)
for i,j in arr
if j == target
return j
end
end
return -1
end
print linearSearch([104, 865, 413, 541, 304, 354, 165, 150], 304)
Go
package main
import "fmt"
func main() {
fmt.Println(linearSearch([]int{104, 865, 413, 541, 304, 354, 165, 150}, 304));
}
func linearSearch(arr []int, target int) int {
for i, _ := range arr {
if arr[i] == target {
return i;
}
}
return -1;
}
Kotlin
fun main(args: Array<String>) {
println(linearSearch(arrayOf(104, 865, 413, 541, 304, 354, 165, 150), 304));
}
fun linearSearch(arr: Array<Int>, target: Int): Int {
for(i in arr.indices){
if(arr[i] == target) {
return i;
}
}
return -1;
}
Swift
func linearSearch(arr: [Int], target: Int) -> Int {
for i in 0 ..< arr.count {
if arr[i] == target {
return i;
}
}
return -1;
}
print(linearSearch(arr: [104, 865, 413, 541, 304, 354, 165, 150], target: 304));
C#
using System.IO;
using System;
class Program
{
static void Main()
{
int[] arr = { 104, 865, 413, 541, 304, 354, 165, 150 };
Console.WriteLine(linearSearch(arr, 304));
}
static int linearSearch (int[] arr, int target) {
for (int i = 0; i < arr.Length; i++) {
if (arr[i] == target) {
return i;
}
}
return -1;
}
}
C
#include <stdio.h>
int linearSearch(int *arr, int target)
{
for(int i = 0; i < 8; ++i){
if(arr[i] == target)
{
return i;
}
}
return -1;
}
int main()
{
int arr[] = {104, 865, 413, 541, 304, 354, 165, 150};
printf("%d", linearSearch(arr, 304));
return 0;
}
あとで動作を確認しようと思った時にコピペで済ませるため、実行箇所や、前処理も含めて記載しておいた。
C++はCと互換性があるので省き、Lispはトライしてみたけれど、網羅的に学習しないと書けそうにないことが判明したので書いていない(笑)
hello worldと比べて、少し世界観の差異が見えてきなあと感じる。もうちょっといろいろやってみたい気がするなあ。 bubbleSort、margeSort、quickSort、binarySearchくらいやってみよう!今無職だしね!(笑)
しかし、Lispは書けなかったけど一番興味が出た。