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; }
有疑问加站长微信联系(非本文作者)