Loading

摘要: 二分查找的引入 在介绍二分查找之前,对于基于数字索引的数组元素的查找,我们可能第一反应都是遍历这个数组,直到给定数组元素值和待查找的值相等时,返回索引值并退出,否则一直遍历到最后一个元素,如果还是没有找到则返回 1,这样的查找虽然是简单粗暴了点,但是对于规模不大的数据集,也是没什么问题的,不过很明显 阅读全文
posted @ 2020-04-15 23:55 字符串爱了数组 阅读(327) 评论(0) 推荐(0) 编辑
摘要: 线性表(即线性数据结构,如数组和链表)的常规排序算法,包括冒泡、插入、选择、归并和快排,其中综合性能最好的就是快排(快速排序),所以快排在工程实践中也有大量的应用,比如很多编程语言都提供了排序函数,而这些排序函数基本都是基于快速排序实现的,比如 PHP 的数组排序函数 sort 就是如此。 今天我们 阅读全文
posted @ 2020-04-15 20:42 字符串爱了数组 阅读(2142) 评论(1) 推荐(1) 编辑
摘要: 快速排序 实现原理 归并排序算法虽好,但是不是原地排序算法,需要消耗额外的内存空间,今天我们要介绍的是常规排序里综合排名最高的排序算法:快速排序,江湖人称「快排」。 快排的核心思想是这样的: 如果要排序数组中下标从 p 到 r 之间的一组数据,我们选择 p 到 r 之间的任意一个数据作为 pivot 阅读全文
posted @ 2020-04-15 20:32 字符串爱了数组 阅读(169) 评论(0) 推荐(0) 编辑
摘要: 归并排序 实现原理 所谓归并排序,指的是如果要排序一个数组,我们先把数组从中间分成前后两部分,然后对前后两部分分别排序,再将排好序的两部分合并在一起,这样整个数组就都有序了。 归并排序使用了分治思想,分治,顾名思义,就是分而治之,将一个大问题分解成小的子问题来解决。说到这里,可能你就能联想起我们之前 阅读全文
posted @ 2020-04-15 20:23 字符串爱了数组 阅读(230) 评论(0) 推荐(0) 编辑
摘要: 选择排序 实现原理 选择排序算法的实现思路有点类似插入排序,也分已排序区间和未排序区间。但是选择排序每次会从未排序区间中找到最小的元素,将其放到已排序区间的末尾。图示如下: 同样,可以在 VisuAlgo 上看动态图:https://visualgo.net/zh/sorting。 示例代码 选择排 阅读全文
posted @ 2020-04-15 11:59 字符串爱了数组 阅读(147) 评论(0) 推荐(0) 编辑
摘要: 插入排序 实现原理 插入排序的原理是:我们将数组中的数据分为两个区间,已排序区间和未排序区间。初始已排序区间只有一个元素,就是数组的第一个元素。插入算法的核心思想是取未排序区间中的元素,在已排序区间中找到合适的插入位置将其插入,并保证已排序区间数据一直有序。重复这个过程,直到未排序区间中元素为空,算 阅读全文
posted @ 2020-04-15 11:43 字符串爱了数组 阅读(149) 评论(0) 推荐(0) 编辑
摘要: 常见基于选择的排序算法有冒泡排序、插入排序、选择排序、归并排序和快速排序,我们在选择排序算法的时候,通常会根据以下几个维度来考虑: 1. 时间复杂度 2. 空间复杂度(对内存空间的消耗) 3. 算法的稳定性(如果待排序的序列中存在值相等的元素,经过排序之后,相等元素之间原有的先后顺序不变) 我们首先 阅读全文
posted @ 2020-04-15 00:43 字符串爱了数组 阅读(149) 评论(0) 推荐(0) 编辑
摘要: 介绍完数组和链表,以及两个特殊的线性结构栈和队列后,已经算是迈入了数据结构的门了,后面很多其他更复杂的数据结构都会基于数组和链表来实现,比如散列表、树、图等,有些甚至需要结合数组和链表来实现,在继续介绍后续复杂的数据结构之前,我们穿插进来一些常见的排序算法和查找算法,在系统介绍这些算法之前,我们先来 阅读全文
posted @ 2020-04-15 00:35 字符串爱了数组 阅读(187) 评论(0) 推荐(0) 编辑
摘要: 另一种跟栈很相似的数据结构 —— 队列,和栈一样,队列也是一中特殊的线性表结构,只不过队列是在一端插入,另一端删除,就跟我们平常排队一样的道理,从队尾入队,在队头出去,所以队列的特性是先入先出(FIFO),允许插入的一端叫队尾,允许删除的一端叫队头。 一张图可以形象的体现两者的差别: 队列 和栈一样 阅读全文
posted @ 2020-04-15 00:29 字符串爱了数组 阅读(166) 评论(0) 推荐(0) 编辑
摘要: 数组和链表,从逻辑角度来说,它们都是线性结构(就是排成一条线的结构,只有前后两个方向,非线性结构包括树、图等,后面会讲到),从存储角度来说,一个是顺序存储,一个是链式存储,各有利弊,数组需要预先申请连续内存,超出限制会溢出,但是对明确知道规模的小型数据集而言,使用数组会更加高效,随机访问的特性也更加 阅读全文
posted @ 2020-04-15 00:11 字符串爱了数组 阅读(188) 评论(0) 推荐(0) 编辑