![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构/算法
文章平均质量分 89
一个程序员的修炼之路
顺势而为
展开
-
一致性HASH算法研究
一致性HASH算法研究投稿者: 地下潜行者1.引言 在研究分布式存储Ceph的CRUSH算法时,看到文章介绍它是一种特殊的一致性HASH算法,于是我便开始研究一致性HASH算法,做先期准备,发现理念确实接近,所以先研究一致性HASH算法的实现思路。2.一致性HASH的出现背景及其优势 在分布式系统中,常常利用HASH算法进行数据分布,使得海量数据均匀的分布在不同的缓存服务器上,目的是希望将数据均匀的分布到各节点,分担压力,尤其是在缓存系统中。一个典型的设计如下:2原创 2021-05-21 07:26:28 · 261 阅读 · 0 评论 -
冒泡排序
渐渐的到了校园招聘的时候,楼主的算法功底实在是不敢恭维;上不及数据挖掘、模式识别、机器学习等高级算法,也只有加强好自己的基本功了,对数据结构和算法书上的基本的算法做分析和实现;就先从排序算法开始吧,本文主要分析楼主学到的第一个冒泡排序算法。一. 算法描述 冒泡排序:依次比较相邻的数据,将小数据放在前,大数据放在后;即第一趟先比较第1个和第2个数,大数在后,小数在前,再比较第2个数与第原创 2012-08-27 14:34:11 · 53969 阅读 · 2 评论 -
自底向上的归并排序
今日翻开严蔚敏的《数据结构(C语言版)》感慨一二,首先书中讲解之详细与形象乃本人博文所不能比拟,有这么一句话说的好"所有的答案都在书中,只是你学习的时候没有注意罢了";其次书的第一章里提到算法的设计要求,除了效率健壮性等,可读性也是重要的一部分,让楼主想起了昨天所写的插入排序中,从后向前查找的代码就比从前向后查找的代码可读性高,这样代码出错的概率降低 和 他人阅读的效率提升;再次,感慨留到下一原创 2012-08-29 16:54:13 · 25867 阅读 · 8 评论 -
九种常用排序的性能分析总结
间间断断的将9种排序实现,并且将其以博客笔记的形式记录下来;现在就该来综合的分析这九种排序,让我们先来看看其算法复杂度和稳定性的分析结果:算法复杂度以及稳定性分析算法名称平均时间辅助空间稳定性冒泡排序O(n2)O(1)是选择排序O(n2)O(1)否插入排序O(n2)O(1)是自底原创 2012-09-07 12:55:14 · 14619 阅读 · 20 评论 -
自顶向下的归并排序
看到网上有些网友用模板写排序算法,然后进行分析,纵生膜拜之意,楼主的C++功底本身也有待提高。看到博客中有人点了踩,虽然有些失落,但踩得好,如果自己给自己打分 也就是个60分及格,对待这几篇博客实在是有笔记的味道。可是楼主还是有些小强精神,踩不死,只求一步一步的进步变成一只大强。这篇文章紧接着上篇自底向上的归并排序,刚好相反:自顶向下的归并排序。一. 算法描述 自顶向下的归并原创 2012-08-29 19:28:14 · 6403 阅读 · 0 评论 -
希尔排序
插入排序的算法复杂度为O(n2),但如果序列为正序可提高到O(n),而且直接插入排序算法比较简单,希尔排序利用这两点得到了一种改进后的插入排序。一. 算法描述希尔排序:将无序数组分割为若干个子序列,子序列不是逐段分割的,而是相隔特定的增量的子序列,对各个子序列进行插入排序;然后再选择一个更小的增量,再将数组分割为多个子序列进行排序......最后选择增量为1,即使用直接插入排序,使最终原创 2012-09-06 19:40:14 · 59678 阅读 · 13 评论 -
插入排序
在冒泡排序、选择排序编写代码之后,楼主渐渐找到了coding的信心,熟能生巧,就像写词唱曲之前,都得先背诵大量的诗词,熟悉各路歌曲,才能走出自己的路线,有自己的杰作。好吧,来让楼主继续进行"社会主义初级阶段"的任务,这次是插入排序。一. 算法描述 插入排序:插入即表示将一个新的数据插入到一个有序数组中,并继续保持有序。例如有一个长度为N的无序数组,进行N-1次的插入即能完成排序;第一原创 2012-08-28 16:28:50 · 58269 阅读 · 14 评论 -
选择排序
昨日写完冒泡排序,和大多数人的感觉一样,太简单,丝毫没有挑战性。但楼主是一个追求踏实平稳的人,希望地基牢固,也为方便后面学习和研究更加高深的算法。但在研究效率上还有待提高,楼主一定好好努力。今天将会写完选择排序 和 插入排序,本文主在选择排序。一. 算法描述 选择排序:比如在一个长度为N的无序数组中,在第一趟遍历N个数据,找出其中最小的数值与第一个元素交换,第二趟遍历剩下的N-1个数原创 2012-08-28 11:18:16 · 79341 阅读 · 15 评论 -
基数排序
前两天去女子监狱某部门维护了下导师10年前的一个程序,发现偌大的一个系统,真正常用的1/10感觉都不到;其实就像我们所学一样,像容器一样装在自己的脑海中,工作中用到的知识确实极少的;知识的深入带来的必然是广度发展,万事万物皆有联系,而且厚积才能薄发。 排序算法写了n种,可不像孔乙己一样考验"茴香豆"的"茴"字有几种写法,而是思维的一种拓展,等到使用的时候根据特定的场景变能灵活的选取更加合原创 2012-09-04 21:23:47 · 30970 阅读 · 13 评论 -
堆排序
堆是一种完全二叉树结构,并且其满足一种性质:父节点存储值大于(或小于)其孩子节点存储值,分别称为大顶堆、小顶堆。堆一般采用数组进行存储(从下标为1开始),则父节点位置为i,那么其左孩子为2*i,右孩子为2*i + 1。一. 算法描述堆排序主要分为两个过程:(1)先使长度为N数组形成一个N个节点组成的大顶堆(2)然后将堆顶数据与末尾数据交换,再对N-1长的堆调整为大顶堆;反复原创 2012-08-31 15:20:46 · 4667 阅读 · 0 评论 -
快速排序
还记得曾哥淡定的哼唱"七月份的前奏是狮子座~,八月份的尾巴也是狮子座~',狮子座的尾巴也是校园招聘的开始,祝愿毕业生们都能够找到满意的工作。如果你拿到太多的offer难以选择的时候,那就给每一份offer定上各项指标,算出权值,最后再用效率超高的快速排序来进行排序。一. 算法描述 快速排序:快速排序采用分治法进行排序,首先是分割,选取数组中的任意一个元素value(默认选用第原创 2012-08-30 16:25:07 · 5789 阅读 · 3 评论