选择排序(Selection sort)是一种简单直观的排序算法。它是每次选出最小或者最大的元素放在开头或者结尾位置(采用升序的方式),最终完成列表排序的算法。
一、图文介绍
我们还是使用数组【10,5,3,20,1]。
1.1,内循环第一遍
我们首先从第一个元素开始,利用一个临时空间存放最小值,然后逐步往后比对,最终找到最小的那个数1,并将第一个元素和1进行交换:
1.2,内循环第二遍
内循环第二遍,我们开始从第二个元素开始去寻找剩余元素的最小值:
1.3,内循环第三遍
1.4,内循环第四遍
二、算法实现
2.1,选择排序
我们用c语言写一个函数,函数里面实现具体算法:
int * selectSort(int *arr,int len)
{
int idx,tmp;
for(int i=0;i<len-1;i++)
{
tmp = arr[i]; //临时存放最小值的变量
idx = i;
for(int j=i+1;j<len;j++) //内循环遍历查询最小值
{
if(arr[j]<tmp)
{
tmp = arr[j];
idx = j;
}
}
tmp = arr[i];
arr[i] = arr[idx]; //元素交换
arr[idx] = tmp;
}
return arr;
}
2.2,程序测试
int main() {
int a[]={10,5,3,20,1};
int *p = selectSort(a,5);
printf("the array a after sort is ");
for(int i=0;i<5;i++){
printf("%d ", *(p++));
}
}