分享
C语言、python、go、C#版本选择排序
zhouqinghe24 · · 2286 次点击 · · 开始浏览这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。
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语言 版本
//mygoprojectmain.go
packagemain
import"fmt"
funcgetminkey(arr[]int,nint)(kint){//go语言的返回值定义在参数后面的括号中。是需要首先定义的
k=n
minkey:=arr[n]
count:=len(arr)
fori:=n+1;i<count;i++{
ifarr[i]<minkey{
minkey=arr[i]
k=i
}
}
returnk
}
funcselect_sort(arr[]int){
len:=len(arr)
fori:=0;i<len;i++{
k:=getminkey(arr,i)
ifk!=i{
arr[i],arr[k]=arr[k],arr[i]//类似python的非常方便的变量换位
}
}
}
funcmain(){
vararr=[]int{31,52,22,7,4,88,33,99,55,24}
select_sort(arr)
len:=len(arr)
fori:=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;
}
有疑问加站长微信联系(非本文作者)
入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889
关注微信2286 次点击
添加一条新回复
(您需要 后才能回复 没有账号 ?)
- 请尽量让自己的回复能够对别人有帮助
- 支持 Markdown 格式, **粗体**、~~删除线~~、
`单行代码` - 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
- 图片支持拖拽、截图粘贴等方式上传
收入到我管理的专栏 新建专栏
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语言 版本
//mygoprojectmain.go
packagemain
import"fmt"
funcgetminkey(arr[]int,nint)(kint){//go语言的返回值定义在参数后面的括号中。是需要首先定义的
k=n
minkey:=arr[n]
count:=len(arr)
fori:=n+1;i<count;i++{
ifarr[i]<minkey{
minkey=arr[i]
k=i
}
}
returnk
}
funcselect_sort(arr[]int){
len:=len(arr)
fori:=0;i<len;i++{
k:=getminkey(arr,i)
ifk!=i{
arr[i],arr[k]=arr[k],arr[i]//类似python的非常方便的变量换位
}
}
}
funcmain(){
vararr=[]int{31,52,22,7,4,88,33,99,55,24}
select_sort(arr)
len:=len(arr)
fori:=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;
}