内部排序
文章平均质量分 86
大力海棠
蓝桥杯Java组个人赛省二,麻瓜ACMer的北京尚学堂·百战程序员( ̄y▽ ̄)~*
展开
-
内部排序(二)希尔排序的两种实现
上一篇日志讲到,对于直接插入排序法,如果要做改良,可以从两个方面入手,减少元素之间的比较次数和减少元素之间的移动次数。从减少元素之间的比较次数方面,我们可以用二分查找的思想,因为在直接插入排序的“寻找插入位置”这一过程,是一个查找过程,所以可以嵌入二分查找的方法来寻找插入位置,把直接插入排序改良成二分插入排序,这是减少了序列中元素之间比较的次数。那么如果想要减少元素之间移动的次数,怎么做?希尔...原创 2018-10-29 20:24:05 · 1616 阅读 · 0 评论 -
内部排序(三)堆排序的两种实现
堆排序是一种选择排序算法,堆排序顾名思义要用到堆,首先来回顾下有关数据结构“堆”有哪些特点。堆常用二叉树来表示,而且如果不是特殊情况的话,通常用一棵完全二叉树来表示堆。因为完全二叉树的结点分布均匀,所以通常可以用数组来实现堆的存储。 根据堆中任一结点和其他结点的值的关系,堆分成两种,最大堆和最小堆。最大堆指堆中任一结点的值都大于其子结点的值;最小堆则相反,堆中任一结点的值都小于其子结点的值。...原创 2018-11-05 18:19:22 · 269 阅读 · 0 评论 -
内部排序(四)归并排序的递归与循环实现
上一篇日志讲到了自己对堆排序的学习,堆排序时间复杂度能达到O(NlogN),且不需要额外的空间来存储排序过程中的有序序列,优点明显,不过堆排序不是稳定的,也就是说排序后相等数据之间的相对位置可能会发生改变。上一周的学习学到了一个同样时间复杂度为O(NlogN)的且是稳定的排序方法!那就是归并排序。归并操作其实更多用在外部排序中- -、,是外部存储器最常用的排序方法,用分而治之的思想,下面会说。...原创 2018-11-19 18:14:21 · 1076 阅读 · 0 评论 -
内部排序(五)快速排序(上)- 概述与选择枢轴
快速排序终于要来了,快速排序也是交换排序的一种,其实讲快速排序前应该先讲讲冒泡排序,因为快速排序是对冒泡排序的一种改进,那就先来用最快速度复习一下冒泡排序:冒泡排序:假设要对待排序了做升序排序,那么首先从待排序列第一个元素开始,和第二个元素作比较,如果第一个元素大于第二个元素,就把它们的位置交换,接着再对序列第二个元素和第三个元素作比较,如果第二个元素比第三个元素大,就交换位置,一直重复直到长...原创 2018-11-26 20:52:47 · 4391 阅读 · 1 评论 -
内部排序(六)快速排序(下)子集划分与快排实现
集划分在上一篇日志中讲快速排序的实现思路时已经讲到,这里先再用一个简单的例子来回顾一下子集划分,假设我们的待排序列是这样:假设我们已经做好了选枢轴的操作,并且把枢轴放到了Right-1的位置了,也就是图中的49。接着设置两个指针,指向待排序列的第一个位置和最后一个位置,然后就可以开始子集划分了。第一步首先从Low指针开始往右遍历,如果遇到比枢轴大的元素,Low指针就停止。这时发现Low...原创 2018-12-03 20:24:59 · 640 阅读 · 0 评论 -
内部排序(七)桶排序与次位优先基数排序
排序算法算是学了一大半了- -、,在弄基数排序时了解到,前面所学的那些(选择、插入、希尔…堆排,快排)排序算法都是要通过比较序列元素之间的关系然后做移动这两步操作。的确,排序嘛,序列从无序到有序一定是比较元素之间的关系然后调整成正确的对应位置。不过基数排序不同,基数排序不需要进行元素之间的比较,而是借助“分配”和“收集”两个操作完成排序的。分配和收集具体是怎么样?我们通过桶排序来说明。没错是桶排序...原创 2018-12-10 20:32:25 · 885 阅读 · 0 评论 -
内部排序(八)主位优先基数排序
上一篇日志搞定了次位优先基数排序,就是把待排序列先按照最低位次位开始插入对应的桶中,然后收集所有的桶,完成一遍排序;接着继续获得次位,继续排序,直到数位达到最大关键字后完成排序。次位优先就是这样,先根据基数创建基数个桶,然后做MaxDigit(关键字)次的桶排序和收集桶操作。 有次位优先,也有主位优先。主位优先,就是把待排序列先按其主位排好序,然后对每一个主位桶再进行内...原创 2018-12-17 19:28:56 · 842 阅读 · 0 评论