C语言版本
#include <stdio.h>
void swap(int *a,int *b)
{
*a=*a+*b;
*b=*a-*b;
*a=*a-*b;
}
int getminkey(int *arr,int start,int len)
{
int k = start,i, minkey=arr[start];
for(i = start + 1; i < len ;i++)
{
if(arr[i] < minkey)
{
minkey=arr[i];
k=i;
}
}
return k;
}
void select_sort(int *arr,int len)
{
int i;
for(i = 0;i < len ; i++)
{
int k = getminkey(arr,i,len);
if(k!=i)
{
swap(&arr[i],&arr[k]);
}
}
}
int main(void)
{
int arr[10]={31,52,22,7,4,88,33,99,55,24};
select_sort(arr,sizeof(arr)/sizeof(int));
int i;
for (i=0;i<10;i++)
{
printf("%d\n",arr[i]);
}
return 0;
}
python 版本
def minkey(arr,n):
count=len(arr)
k=n
mink=arr[n]
for i in range(n,count-1):
if arr[i]<mink :
mink=arr[i]
k=i
return k
def select (arr):
count=len(arr)
i=0
for i in range(0,count-1):
k=minkey(arr,i+1)
if k!=i :
arr[k],arr[i]=arr[k],arr[i]#python 交换变量非常简单
arr=[3,2,5,6,2,4,77,23,643,88,24]
select(arr)
print(arr)
go语言 版本
// mygo project main.go
package main
import "fmt"
func getminkey(arr []int, n int) (k int) { //go语言的返回值定义在参数后面的括号中。是需要首先定义的
k = n
minkey := arr[n]
count := len(arr)
for i := n + 1; i < count; i++ {
if arr[i] < minkey {
minkey = arr[i]
k = i
}
}
return k
}
func select_sort(arr []int) {
len := len(arr)
for i := 0; i < len; i++ {
k := getminkey(arr, i)
if k != i {
arr[i], arr[k] = arr[k], arr[i] //类似python的非常方便的变量换位
}
}
}
func main() {
var arr = []int{31, 52, 22, 7, 4, 88, 33, 99, 55, 24}
select_sort(arr)
len := len(arr)
for i := 0; i < len; i++ {
fmt.Println(arr[i])
}
}
C# 版本
static void Main(string[] args)
{
int[] arr = { 31, 52, 22, 7, 4, 88, 33, 99, 55, 24 };
SelectSort(arr);
for (int i = 0; i < arr.Length; i++)
{
Console.WriteLine(arr[i]);
}
Console.ReadKey();
}
private static void SelectSort(int[] arr)
{
for (int i = 0; i < arr.Length; i++)
{
int k = GetMinKey(arr, i);
if (k != i)
{
Swap(ref arr[k],ref arr[i]);
}
}
}
private static void Swap(ref int a, ref int b)//C# 使用ref引用类型来改变实参的值
{
a = a + b;
b = a - b;
a = a - b;
}
private static int GetMinKey(int[] arr, int n)
{
int k = n;
int min = arr[n];
for (int i = n + 1; i < arr.Length; i++)
{
if (min > arr[i])
{
min = arr[i];
k = i;
}
}
return k;
}