简单选择排序
简单选择排序法就是通过n-i次关键字间的比较,从n-i+1个记录中选出关键字最小的记录,并和第i个记录交换。如图所示:
完整代码
#include <stdio.h>
void SimpleSelectSort(int arr[],int len)
{
int i = 0;
int min;//记录最小值的下标
int temp;
for(i;i < len-1;i++)
{
min = i;
for(int j = i + 1;j < len;j++)
{
if(arr[min] > arr[j])
{
min = j;
}
}
if(min != i)
{
temp = arr[i];
arr[i] = arr[min];
arr[min] = temp;
}
}
}
void Show(int arr[],int len)
{
for(int i = 0;i < len;i++)
{
printf("%d ",arr[i]);
}
}
int main()
{
int arr[] = {95,8,409,8,93};
int len = sizeof(arr)/sizeof(arr[0]);
SimpleSelectSort(arr,len);
Show(arr,len);
}
时间复杂度分析:
首先,简单选择排序是一个稳定的排序算法;它最大的特点就是交换移动数据次数相当少,这样也就节约了相应的时间。分析它的时间复杂度发现,无论最好最差的情况,其比较次数都是一样的多,第i趟排序需要进行n-i次关键字的比较,此时需要比较
而对于交换次数而言,当最好的时候,交换为0次,最差的时候,也就初始化降序,需要交换n-1次,基于最终的排序时间是比较与交换的次数总和,因此,总的时间复杂度依然为O(n²)