选择排序相较于冒泡排序和桶排序更优简洁 省时 省力 省空间
基本思路(从小到大)
选择排序的基本思路与其他两个不同:
从第一个数开始向后查找比这个数小的最小值,两数交换位置,之后以此类推,直到倒数第二个数停止。
具体过程
在上文我提到要查找最小值,那该如何实现呢?
(共有n个数,从第i个开始查找)
我的方法是定一个minn(为了避免与函数名冲突),每查找到一个小于a[i]的数,就让它和minn比较,如果小于minn就更新minn,并用变量t记录最小值的数组下标,最后swap(a[i],a[t]),minn=0x3f(因为下一个数遍历时最小值会变化)。
注意 minn的初始值要赋大一点(防止数组内最小值太大,影响计算)
主要代码
void xuanzepaixu(int a[])
{
for(int i=1;i<n;i++)//枚举1到n-1
{
for(int j=i+1;j<=n;j++)//向后查找最小值
{
if(a[i]>a[j]&&a[j]<minn)//满足小于a[i]和minn
{
minn=a[j];//更新minn
t=j;//记录数组下标
}
}
swap(a[i],a[t]);//交换,最小值提前
}
}