
算法
雪峰流云
以技术为乐的程序猿!
展开
-
Mastering Algorithms with C中文版附带源码说明
1.首先从OReilly的该书官网下载相应的源码:http://http://shop.oreilly.com/product/9781565924536.do解压相应的软件包,只选择相应的Unix文件夹,因为我只在Ubuntu 12.04 64bit下面编译,下面是相应的源码目录:注意阅读该文件夹下面的README文件,我们可以大致了解该源码的目录结构说明,i原创 2013-11-02 17:48:41 · 3607 阅读 · 0 评论 -
数据结构与算法常用名词术语整理
binary search 二分查找half-interval search 折半查找logarithmic search 对数搜索sentinel 哨兵pivot 基准数median 中位数,中值partition 分割percolate 过滤sentinel 哨兵linear time 线性时间logarithmic time 对数时间call st...原创 2019-04-25 14:03:35 · 1081 阅读 · 0 评论 -
求无序数组的中位数(c语言版本)
在面试时,会经常被问道,如何求解一个无序数组的中位数?很多人往往都会第一感觉就是,先将该数组排序,然后找出最中间的那个数,但是这种思路通常的时间复杂度最好是O(nlogn),更糟的情况下会到O(n^2),并不是最优解,也就不能impressed面试官了。下面我们聊聊这个话题。何为中位数?中位数,就是数组排序后位于数组最中间位置的那个元素。当然,细分析的话,还要区分该数组的长度,如果该数组长...原创 2019-03-22 16:06:41 · 9523 阅读 · 1 评论 -
无序单链表排序算法(c语言版本)
这是一道非常经典的面试题。我们知道,快速排序的思想是,通过一个基准元素(pivot),一趟排序就将数据划分为两个部分:左边的部分小于该基准元素,右边的部分大于该基准元素。另外,实现快速排序的关键在于随机访问数据元素,所以快速排序通常都是基于数组来实现的,但是面试中往往会要求对无序单链表进行快排,这就明显不能使用快速排序的基本思想,因为从链表尾部无法向链表头部遍历。解决方法还是基于快速排序思想,...原创 2019-03-21 16:57:12 · 6867 阅读 · 0 评论 -
快速排序的两种实现方法(c语言版本)
经过调研发现,对任意无序整数数组,快速排序有两种实现方法,这里简单阐述下思路:思路一:随意选择一个基准元,一般选择数组的起始元或末尾元,Weiss这本书上特意搞了个算法来选择基准元,……,总之就是基准元的选择要尽量随机。选定基准元之后,比如选择数组起始元为基准元,从数组右边开始,向左边遍历,遇到比基准元大的跳过,直至遇到比基准元小的元素停下来;再从左边向右边遍历,跳过比基准元小的,直至遇到比基...原创 2019-03-20 15:15:07 · 2056 阅读 · 0 评论 -
删除单链表中的重复节点(c语言版本)
这是一道经典的面试题,下面是我的研究和举一反三,特整理如下:分为三种情形:(1)删除有序链表的重复节点,重复节点一个都不留(2)删除有序链表的重复节点,重复节点只留一个(3)删除无序链表的重复节点,重复节点只留一个下面是相关节点的定义:typedef struct ListNode { int val; struct ListNode *next; ...原创 2019-03-20 14:02:42 · 14579 阅读 · 0 评论 -
使用最小堆使用优先级队列(c语言版本)
下面的例子来自Weiss的《数据结构与算法分析:c语言描述》,自己亲自敲了一遍,跑了个demo,并将结果记录下来。binheap.h的头文件声明//description: 使最小堆实现优先级队列//date: 2019-03-15#ifndef __BINHEAP_H__#define __BINHEAP_H__typedef int ElementType;struc...原创 2019-03-15 20:06:03 · 747 阅读 · 0 评论 -
十种经典排序算法精粹(c语言版本)
下面给出这段时间我苦心研究验证过的十种经典排序算法的C语言版本,即下面的排序算法:插入排序,shell排序,冒泡排序,快速排序,选择排序,堆排序,归并排序,桶排序,基数排序和计数排序。整理出来以作备忘,不足之处,欢迎大家批评指正!其中计数排序分别给出了不稳定和稳定两种排序算法,测试时,使用随机生成大数组和随机手动输入的方法来测试。//description: 这里给出了c语言版本的10种...原创 2019-03-15 19:56:06 · 815 阅读 · 0 评论 -
不相交集类以及应用迷宫生成
简单介绍:考虑一个迷宫的生成,一个简单算法就是从各处的墙壁开始(除入口和出口之外)。此时,不断地随机选择一面墙,如果被该墙分割的单元彼此不联通,那么就把这面墙拆掉。重复这个过程直到开始单元和终止单元联通,那么就得到一个迷宫。实际上不断的拆掉墙壁直到每个单元都可以从其他单元到达更好(这会使迷宫产生更多误导的路径)。因此主要是两个问题:1. 拆掉墙如果两个单元不连通。2. 保留墙如果两转载 2013-08-25 13:23:25 · 2728 阅读 · 0 评论 -
weiss数据结构和算法书的使用说明
《数据结构与算法分析 C语言描述》Mark Allen Weiss著,冯舜玺译,机械工业出版社。Weiss教授的经典教材三部曲之一,其中的C语言描述版本,也就是本书,被称为20世纪最重要的30本计算机教材之一。Mark Allen Weiss,1987年在普林斯顿大学获得计算机科学博士学位,师从著名算法大师Robert Sedgewick,现任美国佛罗里达国际大学计算与信息科学学院教授。他曾经担任转载 2013-08-18 22:37:03 · 2777 阅读 · 2 评论 -
二分查找算法的一点改进
在计算机科学中,二分查找,是一种在有序数组中查找某一特定元素的搜索算法。这种搜索算法每一次比较都使搜索范围减半。第一篇二分查找的论文发表于1946年,然而第一个没有bug的二分查找算法却是在1962年才出现,中间用了16年时间。本文首先二分查找算法给出了官方标准写法,然后给出另两种改进。主要原因是,当low和high对应的数组元素比较大时,求平均值可能会造成溢出,所以针对此做了一些改进。...原创 2019-04-30 11:03:33 · 1495 阅读 · 0 评论