選択ソート(C言語、Go言語)

選択ソートは決められた範囲の中から最小値(もしくは最大値)を選んでいくという、わかりやすいソートです。

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