简单选择排序:
就是通过n-i次关键字间的比较,从n-i+1个记录中选出关键字最小的记录,并和第i个记录交换。简单选择排序复杂度分析:它的比较次数一定:n(n-1)/2。也因此无论在序列何种情况下,它都不会有优秀的表现,可见对数据的有序性不敏感。它虽然比较次数多,而对于交换次数而言,当最好的时候,交换为0次,最坏的时候交换次数为n-1次,所以数据交换量却很少,基于时间复杂度是比较与交换次数的总和,因此总的时间复杂度依然为O(n^2)。尽管与冒泡排序算法的时间复杂度相同,但是简单选择排序的性能上还是略优于冒泡排序。
复杂度:
平均情况:O(n*n)
最好情况:O(n*n)
最坏情况:O(n*n)
空间复杂度:O(1)
稳定性:
举个例子,序列5 8 5 2 9,我们知道第一遍选择第1个元素5会和2交换,那么原序列中2个5的相对前后顺序就被破坏了,所以选择排序不是一个稳定的排序算法。
#include<stdio.h>
void printArray(int a[], int size) //打印数组元素
{
int i;
for(i = 0; i < size; i++)
printf("%d ",a[i]);
printf("\n");
}
void Select_Sort(int a[],int len)
{
int i,j,index,temp;
for (i = 0;i < len-1;i++)
{
index = i;
for (j = i+1;j < len;j++)
{
if (a[index] > a[j])
index = j;
}
if (i != index)
temp = a[i];
a[i] = a[index];
a[index] = temp;
printArray(a,10);
}
}
int main()
{
int count=10,a[10]={3,0,1,8,7,2,5,4,9,6};
printArray(a,count);
Select_Sort(a,count);
}