- 博客(5)
- 收藏
- 关注
原创 数据结构笔记--排序(5)
六.堆排序堆排序其实是选择排序的进化版本,回忆一下选择排序把待排序列分成没有排序和已排序两部分,每一趟从未排序的序列中选择一个最大(最小)的元素插入到已排序的末尾处。选择排序最耗费时间的地方就是从未排序的序列中选择一个合适的数,选择排序使用的是遍历整个未排序序列的方法,找到一个最大值(最小值),其实还可以用更加简单的方法。树形选择排序还是看序列 int a[] ={49 ,38 ,65 ,97 ,76 ,13 ,27 ,49}可以根据此序列构建一棵树,树根节点为序列中的最小值,取出这个最小值13,
2020-12-14 15:08:18
74
原创 数据结构笔记--排序(4)
五.快速排序快速排序是对冒泡排序算法的改进,核心思想就是通过一趟排序把待排序序列分成两部分,一部分比关键字(枢轴)大,一部分比关键字小,重复以上过程,直到排序完成看看具体怎么做int a[] ={49 ,38 ,65 ,97 ,76 ,13 ,27 ,49}以待排序序列的第一个元素49为关键字 第一趟:27 38 13 49 76 97 65 49以待排序序列的第一个元素27 76为关键字第二趟:13 27 38 49 49 65 76 97稍微详细一点的思路第一趟排序定义两个指针,一个
2020-12-14 14:47:00
158
原创 数据结构笔记--排序(3)
四.希尔排序希尔排序其实是插入排序的优化版本回忆下直接插入排序算法,在初始序列是正序(递增)的时候,时间复杂度为O(N),在初始序列是逆序(递减)的时候,时间复杂度是O(N^2)。由此设想,如果初始序列“基本有序”,那么直接插入排序的性能就会提高那么怎么让序列基本有序呢?如果有一种操作让混乱的序列基本有序,那么会不会把已经排好的序列打乱,反而将事情变的复杂了。希尔排序算法就是将初始序列分成几个序列,然后将差分的序列排好拆分的方式就是——间隔下面再来对这个数组使用希尔排序法进行排序int a
2020-12-14 14:32:27
46
原创 数据结构笔记--排序(2)
二.选择排序选择排序和冒泡排序算法上比较像,每次都从未排好的序列中选择一个最大(或最小)的数,放在已经排好的序列中的最后面int a[] ={49 ,38 ,65 ,97 ,76 ,13 ,27 ,49}升序序列:我们还是把它分为两组,已排好的序列,未排好的序列初始状态已经排好的序列没有排好的序列 49 38 65 ,97 ,76 ,13 ,27 ,49数组a = {49,38 65 ,97 ,76 ,13 ,27 ,49}以下为插入排序操作第一趟:13 49 65 97 76 38 2
2020-12-14 14:20:50
128
原创 数据结构学习笔记---排序(1)
排序笔记总结了如下排序算法1.插入排序2.选择排序3.冒泡排序4.希尔排序5.快速排序6.堆排序7.归并排序用以上七种方法把如下序列排序int a[] ={49 ,38 ,65 ,97 ,76 ,13 ,27 ,49}一.插入排序插入排序的思想就是从未排序的那堆数中取出一个数,插入到已经排好序的序列里先抛开代码,将以上思想变成可执行的操作升序序列:1.从未排序的那堆数中取出一个数:因为没有排序过,可以把第一个元素49视为已排好的元素,把第二个元素及其以后的元素视为未排序的序列。已
2020-12-10 17:09:38
87
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人