選択ソートは決められた範囲の中から最小値(もしくは最大値)を選んでいくという、わかりやすいソートです。
C言語版。
selection_sort.c
#include <stdio.h> void selection_sort(int ar[], int len) { int i, j, min, tmp; for (i = 0; i < len - 1; i++) { min = i; for (j = i + 1; j < len; j++) { if (ar[j] < ar[min]) min = j; } tmp = ar[i]; ar[i] = ar[min]; ar[min] = tmp; } } int main () { int ar[] = {3, 1, 5, 2, 9, 7, 0}; int len = sizeof ar / sizeof(int); selection_sort(ar, len); printf("["); for (int i = 0; i < len; i++) { printf("%d, ", ar[i]); } printf("\b\b]\n"); return 0; }
Go言語版。C言語版と変わりません。
selection_sort.go
package main import "fmt" func selection_sort(ar []int) []int { for i := 0; i < len(ar) - 1; i++ { min := i for j := i + 1; j < len(ar); j++ { if ar[j] < ar[min] { min = j } ar[min], ar[i] = ar[i], ar[min] } } return ar } func main() { ar := selection_sort([]int{3, 1, 5, 2, 9, 7, 0}) fmt.Println(ar) }
おまけ。Ruby 版。
selection_sort.rb
class Array def selection_sort l = size (l - 1).times do |i| min = i (i + 1).upto(l - 1) {|j| min = j if self[j] < self[min]} self[min], self[i] = self[i], self[min] end self end end