zoukankan      html  css  js  c++  java
  • 数据结构(七)排序---简单选择排序

    一:简单选择排序

    定义:

    简单选择排序就是通过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)
    简单选择排序的性能要略优于冒泡排序
  • 相关阅读:
    Mybatis的缓存
    Mybatis使用assocation和Collection实现延迟加载
    Mybatis:一对多的查询
    Mysql:事务
    Mysql:多表查询
    Mysql:数据库的设计
    Mysql:约束
    MYSQL:DQL-查询表中的记录
    panic: cannot create context from nil parent
    $request input 获取参数null
  • 原文地址:https://www.cnblogs.com/ssyfj/p/9510613.html
Copyright © 2011-2022 走看看