GolangとGo言語は別物だと思ってたんですが、同じだったんですね。
C言語は英語では単に「C」とだけ言うらしいんですが、Clangって言う人もいます。
でもClangってC言語、C++Objective-Cなど全ての派生言語も含むらしいんですが、GoとGolangはできれば何方かに統一して欲しいと思うのは僕だけでしょうか?
え?どっちでもいい?そらそうですよね。僕もそう思います。
そんな訳でGo言語で選択ソート作ります。
ソースコード
package main
import "fmt"
func selectSort(numbers []int) ([]int) {
//数値配列を最初から順番に評価していく
for i := 0; i < len(numbers)-1; i++ {
//最小値の格納変数(最初は評価対象数値を入れておく)
min := numbers[i];
//入れ替え対象番号用変数
num := i;
//評価番以降の一番低い数値を取得
for j := num+1; j < len(numbers); j++ {
if (min > numbers[j]) {
num = j;
min = numbers[j];
}
}
//評価番号と入れ替え番号が同じ場合は入れ替えなしとして処理無し
if (num == i) {continue;}
//評価番号と入れ替え番号の値を入れ替える
numbers[num] = numbers[i];
numbers[i] = min;
}
return numbers;
}
func main(){
numbers := []int{10,2,12,7,16,8,13}
num2 := selectSort(numbers);
fmt.Println(num2);
}
結果
$ go run selectSort.go
[2 7 8 10 12 13 16]
今回も難なくクリアです。めでたしめでたし。
解説
前回怠けて対応しなかった関数化しておきました。
C言語っぽく、変数と関数の戻り値の型指定が、少し独特ですね。
未だに変数定義の「:=」記述(※他にも書き方ありますが・・・)に慣れないんですが、もっと触り慣れて慣れようと思います。
あと、ひとつ気がついたんですが、関数からの戻り値で変数を使う場合に、
numbers := []int{10,2,12,7,16,8,13}
num2 := selectSort(numbers);
という風に記述してますが、「[]int(...)」という書き方が必要なのかと思ったんですが、これは、右辺の方を定義する為の記述だったんですね。
てっきり左辺の定義かと思ってました。
ということは、Golangは受け身的に書けば、分かりやすいかな?と考えられます。
あ、僕だけの感覚かもしれないので、あまりこだわって貰わなくて良いんですが、今回一番時間がかかったのがこの関数の戻り値を変数に入れる処理だったので、少し調べながら四苦八苦してました。
関連リンク
いろいろなプログラム言語でアルゴリズム学習
0 件のコメント:
コメントを投稿