一:简单选择排序
定义:
简单选择排序就是通过n-i次关键字间的比较,从n-i+1个记录中选出关键字最小的记录,并和第i(1<=i<=n)个记录交换之
就是我们从第一个开始循环,获取到最小的就与第一个交换,然后走到第二个位置,找到剩下元素中最小的,和第二个交换,每次循环都是获取最小的数,所以最后排序出来的就是一串从小到大的数据
实现:
{ 5, 2, 6, 0, 3, 9, 1, 7, 4, 8 }
void SelectSort(SqList *L)
{
int i, j, min,count1,count2;
count1 = count2 = 0;
for (i = 1; i < L->length;i++)
{
min = i; //将当前下标定义为最小值下标
for (j = i + 1; j <= L->length;j++) //循环之后的数据
{
count1++;
if (L->r[min]>L->r[j]) //如果由小于当前最小值的关键字
min = j; //更新最小值
}
if (i != min) //若是我们在上面循环中找到最小值,则min会改变,与i不同,就需要进行交换
{
swap(L, i, min);
count2++;
}
}
printf("loop count:%d, swap count:%d
", count1, count2);
}
性能分析:
和上面的冒泡排序相比交换次数变少了,但是和最终版的冒泡比较,可能循环次数不如人家
时间复杂度为O(n*(n-1)/2)-->O(n^2)