排序算法(C++)
king3wade
这个作者很懒,什么都没留下…
展开
-
归并排序
归并排序介绍将两个的有序数列合并成一个有序数列,我们称之为"归并"。归并排序(Merge Sort)就是利用归并思想对数列进行排序。根据具体的实现,归并排序包括"从上往下"和"从下往上"2种方式。从下往上排序将待排序的数列分成若干个长度为1的子数列,然后将这些数列两两合并;得到若干个长度为2的有序数列,再将这些数列两两合并;得到若干个长度为4的有序数列,再将它们两两合并;直接合并成一个数列...转载 2019-04-10 23:34:59 · 212 阅读 · 0 评论 -
快速排序
快速排序介绍快速排序(Quick Sort)使用分治法策略。它的基本思想是:选择一个基准数,通过一趟排序将要排序的数据分割成独立的两部分;其中一部分的所有数据都比另外一部分的所有数据都要小。然后,再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。快速排序流程:(1) 从数列中挑出一个基准值。(2) 将所有比基准值小的摆放在基准前面,所有比基...转载 2019-04-10 00:19:29 · 679 阅读 · 0 评论 -
LeetCode第148题--排序链表
在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序。示例 1:输入: 4->2->1->3输出: 1->2->3->4/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ...原创 2019-05-07 22:57:05 · 146 阅读 · 0 评论 -
二叉堆的实现(最大堆)
二叉堆的介绍二叉堆是完全二元树或者是近似完全二元树,按照数据的排列方式可以分为两种:最大堆和最小堆。最大堆:父结点的键值总是大于或等于任何一个子节点的键值;最小堆:父结点的键值总是小于或等于任何一个子节点的键值。示意图如下:二叉堆一般都通过"数组"来实现。数组实现的二叉堆,父节点和子节点的位置存在一定的关系。索引为i的左孩子的索引是 (2*i+1);索引为i的左孩子的索引是 (2*i...转载 2019-06-12 23:40:43 · 2267 阅读 · 0 评论 -
堆排序
堆排序介绍我们知道,堆分为"最大堆"和"最小堆"。最大堆通常被用来进行"升序"排序,而最小堆通常被用来进行"降序"排序。鉴于最大堆和最小堆是对称关系,理解其中一种即可。本文将对最大堆实现的升序排序进行详细说明。最大堆进行升序排序的基本思想:初始化堆:将数列a[0…n-1]构造成最大堆。交换数据:将a[0]和a[n-1]交换,使a[n]是a[0…n-1]中的最大值;然后将a[0…n-2]重...转载 2019-06-13 00:23:30 · 250 阅读 · 0 评论