首页 > 代码库 > C语言、python、go、C#版本选择排序

C语言、python、go、C#版本选择排序

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;
        }







C语言、python、go、C#版本选择排序