数据结构(七)排序---简单选择排序

一:简单选择排序

定义:

简单选择排序就是通过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\n", count1, count2);
}

性能分析:

和上面的冒泡排序相比交换次数变少了,但是和最终版的冒泡比较,可能循环次数不如人家
时间复杂度为O(n*(n-1)/2)-->O(n^2)
简单选择排序的性能要略优于冒泡排序

 

posted @ 2018-08-21 12:10  山上有风景  阅读(380)  评论(0编辑  收藏  举报