第八章学习小结
这一章是这学期最后一章了,主要学了排序的基本概念、插入排序、交换排序、选择排序、归并排序等排序的相关知识
排序分为内部排序和外部排序,主要学了内部排序。内部排序分为插入类、交换类、选择类、归并类、分配类
插入排序分为直接插入排序、折半插入排序和希尔排序
直接插入排序是把后面的数字和前面排列好的数组进行逐个比较并插入,结合上一章查找的知识不难理解
折半插入排序原理和直接插入排序类似,把查找比较的过程改为折半查找,适合n较大的情况
交换排序包括冒泡排序和快速排序
冒泡排序是依次将相邻每两个数进行比较,每一趟排序可以确定最大关键字的最终位置,反复循环直到某一趟排序过程中没有进行交换
快速排序是由冒泡排序改进而来的,先设置枢轴,通过比较low和high并移动,将小于枢轴的数放在左边,大于枢轴的放在右边,再递归给左右两部分中的数字排序
1 void qsort(sqlist &l, int low, int high) 2 { 3 if(low<high){ 4 pivotloc=partition(l, low, high); 5 qsort(l, low, pivotloc-1); 6 qsort(l, pivotloc+1, high); 7 } 8 }
选择排序包括简单选择排序、树形选择排序、堆排序
简单选择排序就是在学习这一章之前最常用到的排序方法,比较熟悉了
树形选择排序是借助树的结构来进行的,经过改进后就是堆排序
堆排序是这几种排序里面最难的,通过将最大或最小值推到堆顶,每次得到最大或最小值,然后调整树来进行下一轮
调整堆的过程就是堆排序的难点,这部分感觉还理解得不是很透彻
归并排序也是运用了递归,重复将每个有序子序列进行两两归并,得到最终序列
这一章的内容在上课学习的时候感觉不是很难,但全部学完后就有点搞混了,看到不同排序的名字的时候都要想一会才能想起是什么过程和原理,对不同种排序的时间和空间效率的比较也分得不太清楚,接下来要继续看书理清这一章学的内容,搞清楚这些排序分别是怎么实现的
马上就要期末考了,接下来要努力复习了