
数据结构与排序算法
文章平均质量分 69
Morrisss_
做更好地自己。
展开
-
排序算法——插入排序
插入排序是最简单的排序算法之一,插入排序通过N-1躺(pass)的排序,完成序列的有序化。什么叫做躺(pass)?简而言之,假设我们有一个N个元素的数组,从arr[m]到arr[0]的一次有效排序称之为一躺(pass)(其中m >= 1),则若我们想要将数组有序化就需要进行P=1到P=N-1躺排序(P=0可以忽略,它没有前一个元素,自身比较可有可无)。 插入排序通过相邻元素的比较,使部分原创 2014-01-06 21:15:07 · 1095 阅读 · 0 评论 -
二叉查找树(简单C实现)
#ifndef _BIN_TREE_H#define _BIN_TREE_H#include #include #include struct _Tree_node { int data; struct _Tree_node *left; struct _Tree_node *right;};typedef int element_type;t原创 2015-04-13 20:21:27 · 816 阅读 · 0 评论 -
归并排序原理及实现
归并排序是一种基于归并操作的排序方法,其核心思想是分治法(Divide and Conquer),我们首先来一个小例子://数组a和数组b已经有序void merge_array(int a[], int m, int b[], int n, int c[]) { int i = j = k = 0; while (i < m && j < n) { if (原创 2015-10-06 20:03:26 · 836 阅读 · 0 评论 -
Trie树结构与实现
Trie树结构与实现概述 在平时使用搜索引擎或者一些其他工具时,常会有一些智能提示,或许我们需要搜索的内容并不存在,但这些工具都会尽量选择前缀尽可能相似的结果给我们。这里使用到的前缀匹配,大多则是使用Trie树进行处理。Trie树基本定义 Trie树,又被称为前缀树或字典树,与其用途有关,Trie树是一种有序树,用于保存关联数组,其中的Key通常是字符串。与二叉查找树不同,Key并不直接原创 2017-03-14 17:27:27 · 866 阅读 · 0 评论 -
图论基础(一)
图论基础(一)有向图定义 有向图G是一个二元组(V, E),记为G=(V, E)。 其中V是有向图G的顶点集合,是一个有限集合,元素为顶点;E是有向图G的边集合,元素为边,边也是一个二元组(u, v),其中u,v是有向图G的顶点集合中的元素,(u, v)在这里是有方向的边,以u为起点,指向v的一条有向路径。u可以与v相同,代表自身指向自身的一个自环路径。 假定存在有向图G=(V原创 2017-04-12 17:53:16 · 1074 阅读 · 0 评论 -
图论基础(二)
图论基础(二)图的连通性 如果无向图G=(V, E)中每一个顶点到其它任意顶点都是可达的,则称G是连通的。假定有无向图G=(V, E),V={ 1, 2, 3, 4 },E={ (1, 2), (1, 3), (3, 4) },则G的结构如下图: 如果有向图G=(V, E)中任意两个顶点互相可达,则称G为强连通图。如果有向图G=(V, E)不是强连通图,但将G中的边去掉方向之后,是一个连原创 2017-04-13 15:45:55 · 1088 阅读 · 0 评论 -
堆排序原理及实现
堆排序原理及实现概述 排序算法在程序设计中属于使用频度很高的一类算法,好的排序算法对于程序效率的提升有一定作用。常见的简单排序算法如冒泡排序、插入排序,对于多数情况来说O(n^2)的时间复杂度并不是太理想,效果较好的归并排序倒是时间复杂度达到O(n * lgn)了,可惜要使用额外的数组空间。所幸,有一种和归并排序效率差不多的原地排序算法——堆排序。这里就记录一下堆排序的原理及实现细节。堆的基本原创 2017-04-18 09:45:05 · 1500 阅读 · 0 评论