随笔分类 -  算法-排序

摘要:普通的归并排序,需要一个额外的数组来保存每次merge的结果;如果要求不使用额外空间,那么每次merge的时候需要做一些处理。思路:合并left[] 和 right[]时,假如right[0]应该放入left[3],那么:①可以用一个var来保存right[0],然后将left[3]之后的元素右移一... 阅读全文
posted @ 2014-08-18 23:21 阿杰的专栏 阅读(510) 评论(0) 推荐(0) 编辑
摘要:题目:单链表的归并排序,返回排序后的链表。传统的归并都是数组,可以随机访问元素,链表则需要顺序遍历找中间结点。思路:设置两个指针,一个步长为1, 一个步长为2,当快指针到达尾结点时,慢指针指向中间结点,时间复杂度为O(N);平分为左链表L1和右链表L2,递归分裂,直到链表为空或者只有一个结点;将链表... 阅读全文
posted @ 2014-08-17 03:23 阿杰的专栏 阅读(9584) 评论(1) 推荐(1) 编辑
摘要:快速排序的原理:首先找一个标兵值,等于某一个元素值;遍历数组,将数组分为小于标兵值和大于标兵值的两部分;然后分别对两个部分采用快速排序,递归。分开数组时,维持一个指针,指向已找到小部分的最后一个元素;一个指针用于遍历。不稳定排序算法。当数组已经有序时,时间复杂度最差,为O(N2),平均、最优情况下都... 阅读全文
posted @ 2014-08-11 23:07 阿杰的专栏 阅读(215) 评论(0) 推荐(0) 编辑
摘要:归并排序的原理:如果数组的元素个数大于1,则: 将数组平均分为两部分; 左边的数组归并排序;递归 右边的数组归并排序;递归 将两个各自有序的数组合并,需要一个额外的辅助数组,暂时保存合并结果;返回否则,数组元素个数为1时,已经有序;直接返回。稳定排序。时间复杂度在最坏、最好、平均情况下都为O... 阅读全文
posted @ 2014-08-11 22:29 阿杰的专栏 阅读(248) 评论(0) 推荐(0) 编辑
摘要:堆与堆排序的原理,参考该博客:白话经典算法系列之七 堆与堆排序二叉堆是个完全二叉树,可以用一个数组来保存节点,不会浪费空间,能快速定位;本人用一个vector来代替数组,省去自己对内存的分配/重分配和释放等操作。堆排序就是每次取出小顶堆的堆顶并输出,然后对堆重新调整。堆排序需要对数组先建堆【时间复杂... 阅读全文
posted @ 2014-08-07 11:27 阿杰的专栏 阅读(324) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示