
算法
文章平均质量分 71
迹忆客
不患无位 患所以立
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
全面了解一致性哈希算法及PHP代码实现
在设计一个分布式系统的架构时,为了提高系统的负载能力,需要把不同的数据分发到不同的服务节点上。因此这里就需要一种分发的机制,其实就是一种算法,来实现这种功能。这里我们就用到了Consistent Hashing算法。在正式介绍Consistent Hashing算法之前我们先来看一个简单的hash算法,就是用取余数的方式来选择节点。具体的步骤如下:一、根据集群服务的节点数创建一个哈希表二、然后根据键名计算出键名的整数哈希值,用该哈希值对节点数取余。三、最后根据余数在哈希表中取出节点。假设在一个集群原创 2021-11-30 16:37:58 · 351 阅读 · 0 评论 -
全面分析冒泡排序过程
冒泡排序也是一种简单直观的排序算法。其思想是:它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。下面我们通过一个简单的图例来了解一下这个冒泡的过程冒泡排序原数据起始位置为0,依次比较相邻的两个元素。如果前面的元素大于后面的元素,则进行交换。冒泡排序过程我们可以看出,待排序序列有多少个元素,就需要几趟冒泡。但是原创 2021-08-26 09:54:59 · 563 阅读 · 0 评论 -
全面介绍插入排序
何谓‘插入排序’? 其概念如是说:每次将一个待排序的记录,按其关键字大小插入到前面已经排序好的序列中,直到全部记录插入完成为止。概念的东西总是有些抽象,也可称其为基本思想。上述插入排序的概念同样也可说是插入排序的基本思想。抽象的东西理解起来总是有些困难,因此这里需要的是将抽象的概念具体化。我们不妨将其转换成整队问题:开始会有两队,其中一队是按从低到高的顺序排列的,将其命名为A队。另一队是无序的,将其命名为B队。如下图:现在把B队的第一个人(不妨称其为jack)放到A队中,并且保持A队依然是有原创 2021-08-25 10:00:29 · 138 阅读 · 0 评论 -
全面介绍9种常用的排序算法
本篇给大家介绍几种软件工程中常用的排序算法所有排序算法的核心的代码都在《常用排序算法核心代码》有介绍插入排序插入排序的基本思想就是:每次将一个待排序的记录,按其关键字大小插入到前面已经排序好的序列中,直到全部记录插入完成为止。对于插入排序的概念以及其原理大家可以参考《排序算法的学习之路——插入排序(概念篇)》插入排序细分可以分成三种情况。直接插入排序——《排序算法学习之路——直接插入排序》折半插入排序——《排序算法学习之路——折半插入排序》表插入排序 ——《排序算法学习之路——表插入排原创 2021-08-24 13:55:27 · 278 阅读 · 0 评论 -
排序算法学习之路——快速排序
快速排序是由东尼·霍尔所发展的一种排序算法。在平均状况下,排序 n 个项目要Ο(n log n)次比较。在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见。事实上,快速排序通常明显比其他Ο(n log n) 算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来。快速排序使用分治法(Divide and conquer)策略来把一个串行(list)分为两个子串行(sub-lists)。上面部分是引用网上的说法,我对这些定义总是记不太清楚。我们下面直接看实现步骤原创 2021-08-23 09:54:11 · 145 阅读 · 0 评论 -
排序算法学习——归并排序
我们先看归并排序的定义归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。简单来说就是将两个有序表合并成一个有序表。我们先通过下图来了解一下归并排序的流程。下面我们来看如何分解然后再合并的步骤申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列设定两个指针,最初位置分别为两个原创 2021-08-19 14:28:40 · 365 阅读 · 0 评论