
数据结构与算法
pandaflyup
这个作者很懒,什么都没留下…
展开
-
常用排序算法--冒泡排序
最近在看几个基本的排序算法,于是便总结了一下,也算给自己当作备忘吧,如有错误的地方还请路过的批评指正。下面从最基本的冒泡开始。冒泡排序(假设从小到大)基本思想:是一个很简单的原地排序方法:从数组的第一个元素开始(这个元素就是当前的“泡”)向后遍历,如果后一个元素比当前的“泡大,那么当前的“泡”就变成了后一个元素;如果后一个元素比当前的“泡”小,那么交换“泡”和该元素的位置(原创 2013-08-04 11:35:36 · 780 阅读 · 0 评论 -
常用排序算法--插入排序
直接插入排序(假设从小到大)基本思想:(1)从第2个数开始,与第1个数比较,若小于第一个数则交换,这样前两个数已排序好;(2)第三个数与第二个数比较,选择交换或不交换,然后第二个数再与第一个比较,选择交换或不交换;(3)以此类推,把当前数插入到之前已排序的序列中,直到处理完最后一个数为止;时间复杂度:o(n^2)空间复杂度:原地排序o(1)稳定性:稳定适用情况:对数原创 2013-08-04 11:41:41 · 479 阅读 · 0 评论 -
常用排序算法--简单选择排序
简单选择排序(假设从小到大)基本思想:(1)从第一个数开始遍历,找到最小元素,放到数组的第一个位置;(2)然后从第二个数开始遍历,找到最小元素,放到数组的第二个位置;(3)以此类推,遍历n-1次,即可完成数组排序;时间复杂度:o(n^2) 空间复杂度:原地排序 o(1)稳定性:不稳定(比如数组[5,6,5,1,8]经过一次遍历后[1,6,5,5,8]就改变了原来两个原创 2013-08-04 11:39:52 · 662 阅读 · 0 评论 -
常用排序算法--堆排序
堆排序(以从小到大排序为例)基本思想:(1)首先构造最大堆,使最大数在堆顶;(2)然后把堆顶元素与最后一个元素交换,得到最大的数排在数组的最后一位;(3)再把交换后的堆顶元素构造最大堆,依次类推,直到最后只剩一个元素为止;堆排序将需要做两个步骤:-是建堆,二是排序(调整堆)。所以一般在小规模的序列中不合适,但对于较大的序列,将表现出优越的性能。时间复杂度:o(nlogn)原创 2013-08-05 08:46:00 · 629 阅读 · 0 评论 -
常用排序算法--希尔排序
希尔排序简单描述:希尔排序是对插入排序的改进,插入排序每次只能移动一位,速度较慢;通过对数据进行分组,可以实现跨越式移动。基本思想:(1)首先是步长的选择,首先是数组长度的一半,然后再每次减半最后直到步长为1;(2)按照步长对数据进行插入排序;时间复杂度:比简单插入排序(o(n^2))要好,是在o(nlogn)~o(n^2)之间,平均时间复杂度为o(n^3/2)空间复杂度:原创 2013-08-05 08:44:10 · 636 阅读 · 0 评论 -
常用排序算法--归并排序
归并排序基本思想:先把数组拆分,直到分成都只含有一个元素的数组,这样两两合并,逐渐就可以得到已排序的字数组,继续合并直到合并成原来数组长度为止。时间复杂度:o(nlogn)空间复杂度:o(nlogn),每一轮合并都需要n空间,共需要logn轮(第一轮是1×n(需要n个数组,每个数组长度为1),第二轮是2×2/n,第三轮4×4/n,。。。最后一轮是n/2×2(需要两个数组,每个长度为原创 2013-08-07 09:34:34 · 634 阅读 · 0 评论 -
常用排序算法--快速排序
快速排序:(假设从小到大)基本思想:(1)选取一个基准数(本例为选取数组第start个元素),然后遍历数组,把小于基准数的放到数组的前面,大于基准数的放到数组的后边;(2)将基准数与(从后边数)第一个小于等于基准数交换,这样基准数的前面都小于基准数,基准数的后边都大于基准数;(3)然后递归调用本身,完成排序;时间复杂度:o(nlogn)空间复杂度:原地排序o(1)适用情原创 2013-08-07 09:35:59 · 677 阅读 · 0 评论