数据结构第八章学习心得
本章学习了排序
排序分为内部排序和外部排序
外部排序是指内存无法记录所有待排序的数据,需要对外存进行访问的排序。
1.冒泡排序与快速排序都以交换为基本操作,经过重复的交换实现排序
冒泡排序:重复走访过要排序的元素列,依次比较两个相邻的元素,如果顺序错误就把他们交换过来,重复n-1次,时间复杂度为O(n^2)
快速排序:不断重复分成一半,其中一部分记录的关键字均比另一部分的关键字小,多次重复后可以实现排序,时间复杂度最好情况O(log(2)(n))最坏情况:O(n)
2.插入排序
直接插入排序:简单,略,时间复杂度:O(1)
折半插入排序:在插入到已排序的数据时采用二分查找的方法,进一步简化直接插入,时间复杂度:O(1)
希尔排序:分组使用直接排序,时间复杂度:O(1)
3.选择排序
简单选择排序:选择数据中最大(小)的元素,把他放在第相应的位置,直到最小(大)的元素被放置完成。时间复杂度:O(1)
树形选择排序:原理与简单选择相近,但是利用了二叉树的存储特点,用二叉树的功能实现。
4.堆排序:是一种树形选择排序,采用二叉树的特点,一般用双亲节点大于左子树小于右子树作为前提条件。注意在实践运用时,需要根据题目要求调整是选择最大的元素还是最小的元素,然后再入堆然后出堆。时间复杂度O(1)
5.2-路归并排序:将数据不停二分,分到一定规模时开始组内排序,最后将排序归并在一起。时间复杂度o(n) 此用法大多用于内存无法记录所有待排序的数据,也就是和外部排序相关(内部排序也可以用,但是没必要)
心得:学会了希尔排序和折半插入排序,这章给我的感觉是需要理解思考,理解这些排序的作用,到真正需要使用的时候,反而会不停烦恼到底用哪个比较好,需要多做点编程题进行实践。
想法:这章学的比较虚,知识点好像飘在空中,可能也是考试周太接近的原因,我可能需要在复习的时候好好关注一下七八章的内容。