排序算法之选择排序(SelctionSort)

排序算法之选择排序(SelctionSort)

基本思想:

在长度为N的无序数组,第一次遍历n-1个数,找到最小的数值与第一个元素交换,第二次遍历n-2个数,找到最小的数值与第二个元素交换;。。。第n-1次遍历,找到最小的数值与第n-1个元素交换,排序完成。

实例说明

在这里插入图片描述
如上图所示,以一组数据{12,6,1,15,3,19}为例
先选择最小元素1交换到数组头部,则原数组分为:已排序序列和未排序序列。

在未排序序列选最小元素3,交换到已排序序列中。

重复第二步,直到未排序序列数量为0,排序完成。

C语言代码

算法1

#include<stdio.h>
int main()
{
int i,j,t,a[11];
printf(“请输入10个数:\n”);
for(i=1;i<=10;i++)
scanf("%d",&a[i]);
for(i=1;i<=9;i++)
{
for(j=i+1;j<=10;j++)
{
if(a[i]>a[j]) //如果前一个数比后一个数大,则利用中间变量t实现两值互换
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
}
printf("\n排序后顺序:\n");
for(i=1;i<=10;i++)
printf("%5d",a[i]);
printf("\n");

}

算法2

#include<stdio.h>
int main()
{
int i,j,t,a[10];
for(i=0;i<9;i++)
{
int min=i;
for(j=i+1;j<10;j++)
{
if(a[j]<a[min])
{
min=j;
}
}
if(min != i)
{
t=a[i];
a[i]=a[min];
a[min]=t;
}
}
}

平均时间复杂度:O(n2)

使用场景:

当输入规模n较小时,应该使用选择排序或者插入排序。