![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
algorithm
文章平均质量分 70
君亦信
junyixin
展开
-
排序算法之希尔排序
1、介绍 希尔排序是插入排序的一种,是针对直接插入排序算法的改进,又称为缩小增量排序。主要思想:把记录按下标的一定增量分组,对每组使用直接插入排序,随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分为一组,算法便终止。 2、shell sort算法实现 //Shell排序的算法实现: void ShellPass(SeqList R,int d) {原创 2015-01-24 16:03:42 · 370 阅读 · 0 评论 -
排序算法之基数排序/桶排序
基数排序(radix sort)属于分配式排序(distribution sort),又称“桶子法”(bucket sort),顾名思义,它是透过键值的部份资讯,将要排序的元素分配至某些“桶”中,藉以达到排序的作用,基数排序法是属于稳定性的排序,其时间复杂度为O (nlog(r)m),其中r为所采取的基数,而m为堆数,在某些时候,基数排序法的效率高于其它的稳定性排序法。 它是怎么排序的呢原创 2015-03-02 21:53:44 · 410 阅读 · 0 评论 -
排序算法之选择排序
一、简单选择排序 1、基本思想 在要排序的一组数中,选出最小(或者最大)的一个数与第1个位置的数交换;然后在剩下的数当中再找最小(或者最大)的与第2个位置的数交换,依次类推,直到第n-1个元素(倒数第二个数)和第n个元素(最后一个数)比较为止。 简单选择排序的示例: 2、操作方法: 第一趟,从n 个记录中找出关键码最小的记录与第一个记录交换; 第二趟原创 2015-02-28 18:27:01 · 378 阅读 · 0 评论 -
排序算法之快速排序
1、介绍 快速排序(quick sort)是对冒泡排序的一种改进,它的主要思想是:通过一趟排序将要排序的数据分割成独立的两部分, 其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列. 快速排序是一种不稳定的排序算法,也就是说,多个相同的值的相对位置也许会在原创 2015-01-24 21:51:47 · 336 阅读 · 0 评论 -
排序算法之归并排序
1、介绍 归并排序是建立在归并操作上的一种有效的排序算法,是分治法的一个典型应用。 2、归并过程 归并过程为:比较a[i]和a[j]的大小,若a[i]≤a[j],则将第一个有序表中的元素a[i]复制到r[k]中, 并令i和k分别加上1;否则将第二个有序表中的元素a[j]复制到r[k]中,并令j和k分别加上1, 如此循环下去,直到其中一个有序表取完,然后再将另一个有序原创 2015-01-24 21:23:21 · 308 阅读 · 0 评论 -
使用递归实现霍纳法则
1、介绍 假设有n+1个实数a0,a1,…,an,和x的序列,要对多项式Pn(x)= anx ^n+a(n-1)x^(n-1)+…+a1x+a0求值,直接方法是对每一项分别求值,并把每一项求的值累加起来,这种方法十分低效,它需要进行n+(n-1)+…+1=n(n+1)/2次乘法运算和n次加法运算。有没有更高效的算法呢?答案是肯定的。通过如下变换我们可以得到一种快得多的算法,即原创 2015-01-22 21:02:12 · 1032 阅读 · 0 评论 -
哈夫曼树和哈夫曼编码
哈夫曼树与哈夫曼编码 在一般的数据结构的书中,树的那章后面,著者一般都会介绍一下哈夫曼(HUFFMAN) 树和哈夫曼编码。哈夫曼编码是哈夫曼树的一个应用。哈夫曼编码应用广泛,如 JPEG中就应用了哈夫曼编码。 首先介绍什么是哈夫曼树。哈夫曼树又称最优二叉树, 是一种带权路径长度最短的二叉树。所谓树的带权路径长度,就是树中所有的叶结点 的权值乘上其到根结点的 路径长度(若根转载 2015-01-20 15:30:33 · 594 阅读 · 0 评论 -
排序算法之插入排序
插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为O(n^2)。是一种稳定的排序方法。插入算法把要排序的数组分成两部分:第一部分包含了这个数组的所有元素,但将最后一个元素除外(让数组多一个空间才有插入的位置),而第二部分就只包含这一个元素(即待插入元素)。在第一部分排序完成后,再将这个最后元素插入到已排好序的第原创 2015-01-23 21:51:32 · 339 阅读 · 0 评论 -
排序算法之冒泡排序
原理:临近的数字两两进行比较,按照从小到大或者从大到小的顺序进行交换,一趟过去后,最大或最小的数字被交换到了最后一位,然后再从头开始进行两两比较交换,直到倒数第二位时结束。 分析: (1)时间复杂度 若文件的初始状态是正序的,一趟扫描即可完成排序。所需的关键字比较次数 和记录移动次数均达到最小值,所以,冒泡排序最好的时间复杂度为O(n)。若初始文件是反序的,需要进行 趟排序。每趟原创 2015-01-23 19:56:13 · 554 阅读 · 0 评论 -
P问题、NP问题和NPC问题
[zz]澄清P问题、NP问题、NPC问题的概念 这或许是众多OIer最大的误区之一。 你会经常看到网上出现“这怎么做,这不是NP问题吗”、“这个只有搜了,这已经被证明是NP问题了”之类的话。你要知道,大多数人此时所说的NP问题其实都是指的NPC问题。他们没有搞清楚NP问题和NPC问题的概念。NP问题并不是那种“只有搜才行”的问题,NPC问题才是。好,行了,基本上这个误解已经被澄清了。下转载 2015-01-18 14:02:00 · 401 阅读 · 0 评论 -
Rabin-Karp字符串查找算法
简介 暴力字符串匹配是字符串匹配算法中最基本的一种,它确实有自己的优点,比如它并不需要对文本(text)或模式串(pattern)进行预处理。然而它最大的问题就是运行速度太慢,所以在很多场合下暴力字符串匹配算法并不是那么有用。我们需要一些更快的方法来完成模式匹配的工作,然而在此之前,我们还是回头再看一遍暴力匹配,以便更好的理解其他字符串匹配算法。 如下图所示,在暴力字符串匹配里转载 2015-03-05 12:09:51 · 630 阅读 · 0 评论