• 数据结构:第八章学习小结


    第八章 排序

    一、内容小结

    1.排序:按关键字的非递减或非递增顺序对一组记录重新进行排列的操作。

    2.内部排序和外部排序

    前者指的是待排序记录全部存放在计算机内存中进行排序的过程;

    后者指的是待排序记录的数量很大,以致内存一次不能容纳全部记录,在排序过程中尚需对外存进行访问的排序过程。

    3.内存排序方法中序列中分为两个区域:有序序列区和无序序列区

    4.待排序记录的存储方式可分为三种:①顺序表;②链表;③本身存在的连续存储单元。

     

    1 #define MAXSIZE 20//顺序表的最大长度 
    2 typedef int KeyType;
    3 typedef struct{
    4    KeyType key;//关键字 
    5    InfoType otherinfo;//其他数据项 
    6 }RedType;
    7 typedef struct{
    8    RedType r[MAXSIZE + 1];//r[0]闲置或用作哨兵单元 
        int length;
    }SqList; //顺序表类型

     

    5.排序算法效率的评价指标为:①执行时间:关键在于比较次数和移动次数;②辅助空间:理想的空间复杂度是O(1);

    二、排序方法合集及其实践代码

    1.直接插入排序:将一条记录插入到已排好序的有序表中。

    2.折半插入排序:其实这个算法跟二分查找有一些相似:

     

     1 void BInsertSort(SqList &L)
     2 {//折半查找排序
     3     for(i = 2; i < L.length; i++)
     4     {
     5         L.r[0] = L.r[i];//监视哨兵
     6         low = 1; high = i-1;
     7         while(low <= high)
     8         {
     9             m = (low + high)/2;//折半查找 
    10             if(L.r[0].key<L.r[m].key) high = m-1;
    11             else low = m+1;
    12         }    
    13         for(j=i-1;j>=high+1;--j) L.r[j+1] = L.r[j];//记录后移 
    14         L.r[high+1] = L.r[0];
    15         
    16     }
    17 }

     

    3.希尔排序:分组分别进行直接插入排序,是一种不稳定的排序算法。

     

    4.冒泡排序:是稍微熟悉一点的排序方法,而且对过程的分析比较清晰具体一些。一趟下来一边比较大小一边交换。

                       最好情况只需一趟,最坏情况时间平均度O(n²);

    算法特点为:①稳定性好;②适用于链式存储结构;③移动记录次数较多,算法平均时间性能比直接插入排序差。

      (p.s 初始无序,或n较大时,不适用冒泡排序)

    5.快速排序:一次交换可能消除多个逆序。(p.s.递归进行)

    6.选择排序(稳定的):每一趟选择将待排序的序列中最小的关键字,时间复杂度O(n²)。

    7.堆排序(树形选择排序):在当前无序序列中选择最大(小)的记录。将较小(大)的关键字逐层筛选下去。(筛选法)

     

                                           (a)为大根堆                                        (b)为小根堆

    8.归并排序:将两个或两个以上有序表合并成一个有序表的过程。

     

    三、上周实现情况及最后一周目标

      上周说的好好听课做课堂笔记有在实现中,虽然一堂课满满当当地认真听完有一些困难,但是课后也会找时间将不懂的点复看一遍,所以对概念的选择题和判断题上比较有感觉,就是这周因为各门考试和ddl没有抽太多时间敲代码,所以下周的复习周会开始发愤图强,努力将本学期的知识点过一遍脑子~~加油吧!

  • 相关阅读:
    装饰器(十五)
    静态库与动态库
    深浅拷贝(十四)
    迭代器_iter_,生成器yeild,三元运算,列表解析(十三)
    vim
    文件操作(十二)——open,read,close,write,seek,truncate
    在启用属性的情况下启动 Confluence 6
    Confluence 6 属性的一个示例
    Confluence 6 属性的一个活动
    Confluence 6 使用页面请求属性来对慢性能进行问题解决
  • 原文地址:https://www.cnblogs.com/heyi-777/p/13285972.html
Copyright © 2020-2023  润新知