算法
文章平均质量分 55
稳健明
全栈是未来的趋势,做全栈开发。慢慢来,坚持住明天的我会感谢今天的自己。wechat:wzm921128
展开
-
学习回顾算法(冒泡排序)
前言笔者对算法和数据结构方面的印象也算是比较深刻,在读大学的时候,由于专业是应用电子技术,没有学过算法数据结构。大四找工作的时候找嵌入式相关的工作,由于和计算机相关的有些擦边球,所以也找了写C/C++方面的工作,笔试的题目基本是都是算法数据结构,后面阴差阳错的走上了服务后台开发。由于公司开发的时候大多是在固定的框架里边加对应的业务代码,所以也 很少使用数据结构和算法。终于有一次突然想去面试看看自己水原创 2017-11-13 14:13:52 · 240 阅读 · 0 评论 -
学习回顾算法(希尔排序算法)
希尔排序算法概述希尔排序是插入排序的一种。也称为缩小增量排序,是插入排序算法的一种更搞笑的改进版本。希尔排序把记录按下标的一定增量分组,对每组使用直接插入排序算法;随着增量逐渐减少,每组包含的关键词越来越多,当增量减到1时,整个文件恰好被分成一组。希尔排序算法原理先取一个小于n的整数d1作为第一个增量,把列表的记录全部记录分组。所有距离为d1的倍数记录放在同一个组中,先在各组内进行直接直接插入排序;原创 2017-11-24 14:59:03 · 276 阅读 · 0 评论 -
golang基础(golang压缩文件gzip)
前言曾经,因为不够注重基础吃了好多亏。总是很喜欢去看那些高大上的东西,却忽略了最基本的东西。然后会错误的以为自己懂的很多,但是其实是沙堆中筑高台,知道很多高大上的架构,但是基础的东西却不太了解。我觉得,可能这就是大部分开发工程师的通病吧。正题在软件很多应用开发过程中,经常需要使用到文件压缩。有时候是为了加快存盘速度,有时候是为了节省硬盘空间,有时候是为了提高传输效率。gzip是一种比较通用的压缩程序原创 2017-12-04 19:11:46 · 10277 阅读 · 2 评论 -
学习回顾算法(插值查找算法)
插值查找算法概述插值查找算法,是二分法查找算法的改进。将查找点的选择改为自适应选择,可以提高查找效率。 算法注意点和二分法查找一样,都需要列表先排好序。插值查找算法实现1、golang实现package mainimport ( "fmt")func InsertionSearch(values []int, key int) int { if len(values) == 0原创 2017-12-04 13:10:47 · 412 阅读 · 0 评论 -
学习回顾算法(二分法查找)
二分法查找概述二分法查找也称为折半查找,属于有序查找算法。用给定值key先和中间结点的关键字比较,中间结点把线形表分成两个字表,若相等则查找成功;若不相等,再根据key与该中间结点关键字的比较结果确定下一步查找哪个字表,这样递归进行,直到查找到或查找结束发现表中没有这样的结点。前提条件 列表中元素必须是有序的,如果是无须的则需要进行排序操作。二分查找示例 假如有一组数为1,3,5,7,9,11,原创 2017-12-04 11:04:50 · 354 阅读 · 0 评论 -
学习回顾算法(顺序查找算法)
顺序查找算法概述顺序查找算法是在一个已知无序(或有序)队列中找出关键字相同的数的具体位置。顺序查找算法原理 让关键字和队列中的数从最后一个开始逐个比较,直到找出与给定关键字相同的数为止。如果扫描结束已让没有找到关键字,表示查找失败。顺序查找算法分析 时间复杂度: 平均:假设每个数据元素的概率相等 (n + 1)/2 查找不成功:n+1 复杂度:O(n)实现1、golang实现(元素为int原创 2017-12-04 10:17:06 · 479 阅读 · 0 评论 -
学习回顾算法(堆排序算法)
堆排序算法简介堆排序(Heapsort)是指利用堆积数(堆)这种数据结构所设计的一种排序算法,它是选择排序的一种。可以利用数组的特点快速定位指定索引的元素。堆分为大根堆和小根堆,是完全二叉树。大根堆要求是每个节点的值都不大于其父节点的值。在数组的非降序排序中,需要使用大根堆。因为最大值一定在堆顶。堆排序原理堆排序利用了大根堆(或小根堆)堆顶记录的值最大(或最小)这一特征。 一、用大根堆排序的基本思原创 2017-11-23 16:29:17 · 343 阅读 · 0 评论 -
学习回顾算法(快速排序算法)
快速排序算法概述快速排序由C.A.R.Hoare在1962年提出。其基本思想是:通过一趟排序将要排序的数据分隔成独立的两部分,其中一部分的所有数据比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序。快速排序算法原理介绍 假设排序的数组是A[0] … A[N - 1],首先取任意一个数据(通常选用数组的第一个数)作为关键数据,然后将所有比它小的都放到它前面,所有比它大的都放它原创 2017-11-21 17:05:30 · 269 阅读 · 0 评论 -
学习回顾算法(归并排序算法)
归并排序概述归并排序(merge-sort)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个应用。将已有序的自序合并,得到完全有序的序列;即先使每个子序列有序,再使子序列间断有序。再将两个有序表合并成一个有序表。归并排序算法原理 归并过程为:比较a[i]和b[j]的大小,若a[i]<=b[j],则将第一个有序列表中的元素a[i]复制到r[k]原创 2017-11-21 14:58:11 · 294 阅读 · 0 评论 -
学习回顾算法(选择排序)
前言选择排序比冒泡排序算法时间上要优秀一点,主要在于冒泡算法每次比较都要交换位置,而选择排序通过记录最大或最下位置的索引,最后只交换一次位置就可以了。选择排序算法原理 每一次从待排序的元素中选出最小(或最大)的一个元素,存放在序列的起始位置,知道全部待排序的数据排完。例子: 待排序的初始序列为:49、38、65、97、49、13、27、76 排序过程如下 算法分析 (1)时间复杂度 如原创 2017-11-20 17:41:19 · 510 阅读 · 0 评论 -
学习回顾算法(直接插入排序)
直接插入排序是一种最简单的排序方法,它的基本操作是将一个记录插入到已经排好的序的表中,从而得到一个新的、记录数增1的有序表。直接插入原理 当前元素的前面元素均为有序,要插入时,从当前元素的左边开始往前找(从后往前找),比当前元素大的元素都往右移一个位置,最后把当前元素放在已经放的位置就行了。直接插入排序过程例子: 从网上找一个以21、25、49、25、16、8为元素的数排序: 算法分析原创 2017-11-14 23:07:06 · 339 阅读 · 0 评论 -
学习回顾算法(基数排序算法)
基数排序概述基数排序(radix sort)属于分配式排序,又称为“桶子法”(bucket sort)或bin sort。顾名思义,它是透过键值,把要排序的元素分配到已经排好优先级的“桶”中,以达到排序的作用。比如数字中0,1,2,3,4,5,6,7,8,9。就是已经排好序的桶了。在某些时候基数排序的效率高于其他排序算法。基数排序算法原理基数排序(以整形为例),将整形10进制按每位拆分,然后从低位到原创 2017-11-27 14:49:28 · 320 阅读 · 0 评论