
排序
zhcblog
从事云计算分布式存储相关工作
展开
-
图解快速排序及双路三路快速排序
前言之前我们介绍了交换类排序中的冒泡排序,这次我们介绍另一种交换类排序叫做快速排序。快速排序的优点是原地排序,不占用额外空间,时间复杂度是O(nlogn)。当然,对于快速排序来说,它也是有缺点的,它对于含有大量重复元素的数组排序效率是非常低的,时间复杂度会降为O(n^2)。此时需要使用改进的快速排序—双路快速排序,在双路快速排序的基础上,我们又进一步优化得到了三路快速排序。快速排序快速排...转载 2020-04-09 18:23:08 · 994 阅读 · 0 评论 -
堆排序
堆结构堆是一种数据结构,它的结构和完全二叉树 一致,分为大顶堆和小顶堆。什么是大顶堆、小顶堆呢?以大顶堆为例,堆顶元素是整个堆内值最大的元素,小顶堆反之保存的是最小的元素。如下图所示:堆结构数据保存堆结构原本是一个完全二叉树的结构,但是这里我们是借用堆来实现对数组的排序,所以我们用数组来保存堆中的数据,比如用下面的数组来保存上面堆结构里的数据:除此之外我们还要知道在数组中如何对节点进行...原创 2020-03-25 18:39:30 · 180 阅读 · 0 评论 -
谢尔排序
算法原理谢尔排序( Shellsort)的名称源于它的发明者 Donald Shell,该算法是冲破二次时间屏障的第一批算法之一,不过,直到它最初被发现的若干年后才证明了它的亚二次时间界。它通过比较相距一定间隔的元素来工作;各趟比较所用的距离随着算法的进行距离减小,直到只比较相邻元素的最后一趟排序为止。由于这个原因,谢尔排序有时也叫作缩减增量排序(diminishing increment s...原创 2020-03-24 21:54:54 · 451 阅读 · 0 评论 -
插入排序
算法特点当数组元素较少、或者数组接近排序时效率较高插入排序为稳定排序算法原理插入排序是一种简单的排序算法之一,它的原理是对一个数组arr从头开始遍历,当前遍历的位置我们记为pos,然后我们一边遍历一边保证pos前面是已经排好序的子数组后面则先不管这样的状态。为了保持这样的状态我们需要这样做:对于当前pos指向的位置我们将它插入到前面已经拍好序的有序子数组里面,但是怎么插入呢?就和你...原创 2020-03-24 21:53:21 · 113 阅读 · 0 评论 -
归并排序
合并两个有序数组在讨论归并排序之前我们先来解决下面这个问题:请将下面两个有序数组合并成一个有序数组arr1 = { 4 5 6 9 } ; arr2 = { 2 3 7 10};很显然要合并这两个子数组我们需要用i和j分别指向arr1和arr2从头遍历子数组,并且比较子数组当前位置值的大小,将较小的值赋值到要合并的数组里面然后将对应的i或者j指针向后移动继续遍历就可以了。其实归并...原创 2020-03-24 21:50:06 · 101 阅读 · 0 评论