C/C++ Learning

您正在查看: 算法 分类下的文章

libevent2.0之minheap最小堆源码分析以及使用实例

目录结构:. ├── a.out 可执行 ├── main.c 测试主程序 └── minheap.h 少许修改的minheap头文件 1、minheap.h #ifndef _MIN_HEAP_H_ #define _MIN_HEAP_H_ #include <stdlib.h> struct event { unio...阅读全文

字符串匹配-BruteForce暴力匹配

BF(Brute Force)算法是普通的模式匹配算法,BF算法的思想就是将目标串S的第一个字符与模式串T的第一个字符进行匹配,若相等,则继续比较S的第二个字符和 T的第二个字符;若不相等,则比较S的第二个字符和T的第一个字符,依次比较下去,直到得出最后的匹配结果。BF算法是一种蛮力算法。算法思想:1、依次从主串的首字符开始,与模式串逐一进行匹配;2、遇到失配时,则移到主串的第二个字符,将其...阅读全文

8大经典排序算法-插入排序-希尔排序(4)

希尔排序希尔排序(Shell Sort)是插入排序的一种。是针对直接插入排序算法的改进。该方法又称缩小增量排序,因DL.Shell于1959年提出而得名。 基本思想:先取一个小于n的整数d1作为第一个增量,把文件的全部记录分成d1个组。所有距离为dl的倍数的记录放在同一个组中。先在各组内进行直接插人排序;然后,取第二个增量d2<d1重复上述的分组和排序,直至所取的增量dt=1(dt&l...阅读全文

8大经典排序算法-插入排序-直接插入排序(3)

插入类排序插入排序(Insertion Sort)的基本思想是:每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子文件中的适当位置,直到全部记录插入完成为止。插入排序一般意义上有两种:直接插入排序和希尔排序,下面分别介绍。直接插入排序基本思想:最基本的操作是将第i个记录插入到前面i-1个以排好序列的记录中。具体过程是:将第i个记录的关键字K依次与其前面的i-1个已经拍好序列的记录...阅读全文

8大经典排序算法-交换排序-快速排序(2)

基本思想:快速排序是对冒泡排序的一种改进。由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。实现:设要排序的数组是A[N],首先任意选取一个数据(通常选用第一个数据)作为关键数据,...阅读全文

8大经典排序算法-交换排序-冒泡(1)

算法一直是编程的基础,而排序算法是学习算法的开始,排序也是数据处理的重要内容。所谓排序是指将一个无序列整理成按非递减顺序排列的有序序列。排列的方法有很多,根据待排序序列的规模以及对数据的处理的要求,可以采用不同的排序方法。那么就整理下网上搜索的资料,按自己的理解,把C语言的8大排序算法列出来。普通意义上,排序算法可以分为三大类:1 交换类排序法2 插入类排序法3 选择类排序法一.交换类排序法...阅读全文

链表问题集锦

链表问题在面试过程中也是很重要也很基础的一部分,链表本身很灵活,很考查编程功底,所以是很值得考的地方。我将复习过程中觉得比较好的链表问题整理了下。下面是本文所要用到链表节点的定义:struct Node{int data; Node* next;};在O(1)时间删除链表节点题目描述:给定链表的头指针和一个节点指针,在O(1)时间删除该节点。[Google面试题]分析:本题与《编程之美》上的...阅读全文

堆-Heap

堆:1、概念堆(二叉堆)可以视为一棵完全的二叉树,完全二叉树的一个“优秀”的性质是,除了最底层之外,每一层都是满的,这使得堆可以利用数组来表示(普通的一般的二叉树通常用链表作为基本容器表示),每一个结点对应数组中的一个元素。 如下图,是一个堆和数组的相互关系堆和数组的相互关系对于给定的某个结点的下标 i,可以很容易的计算出这个结点的父结点、孩子结点的下标:Parent(i) = floor(...阅读全文