![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Algorithms
Chasoncsdn
这个作者很懒,什么都没留下…
展开
-
排序/查找算法
主要排序法有: 一、冒泡(Bubble)排序——相邻交换 二、选择排序——每次最小/大排在相应的位置 三、插入排序——将下一个插入已排好的序列中 四、壳(Shell)排序——缩小增量 五、归并排序 六、快速排序 七、堆排序 八、拓扑排序 九、锦标赛排序 十、基数排序 综合比较,大致有如下结果: 时间效率比较: 结论: 1.从平均时间性能上,快原创 2015-07-14 11:37:18 · 533 阅读 · 0 评论 -
希尔排序(shellsort)
希尔排序(Shell Sort)是插入排序的一种。又缩小增量排序,是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。该方法因DL.Shell于1959年提出而得名。 希尔排序是基于插入排序的以下两点性质而提出改进方法的: 1.插入排序在对几乎已经排好序的数据操作时,效率高,即可以达到线性排序的效率。 2.但插入排序一般来说是低效的,因为插入排序每次只能将数据移动一位。 基本原创 2015-07-20 11:31:04 · 478 阅读 · 0 评论 -
基数排序
基数排序(radix sort)属于“分配式排序”(distribution sort),又称“桶子法”(bucket sort)或bin sort,顾名思义,它是透过键值的部份资讯,将要排序的元素分配至某些“桶”中,藉以达到排序的作用,基数排序法是属于稳定性的排序,其时间复杂度为O (nlog(r)m),其中r为所采取的基数,而m为堆数,在某些时候,基数排序法的效率高于其它的稳定性排序法。 实现原创 2015-07-20 17:16:22 · 447 阅读 · 0 评论 -
归并排序(Merge sort)
归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。 归并操作: 归并操作(merge),也叫归并算法,指的是将两个顺序序列合并成一个顺序序列的方法。 如 设有数列{6,202,100,30原创 2015-07-20 15:43:48 · 311 阅读 · 0 评论 -
堆排序(Heapsort)
堆排序(Heapsort)是指利用堆积树(堆)这种数据结构所设计的一种排序算法,它是选择排序的一种。可以利用数组的特点快速定位指定索引的元素。堆分为大根堆和小根堆,是完全二叉树。大根堆的要求是每个节点的值都不大于其父节点的值,即A[PARENT[i]] >= A[i]。在数组的非降序排序中,需要使用的就是大根堆,因为根据大根堆的要求可知,最大的值一定在堆顶。 二叉堆的定义 二叉堆是完全二叉树或者原创 2015-07-20 16:33:24 · 472 阅读 · 0 评论 -
常见的查找算法
1)顺序查找/*包含头文件*/#include <stdio.h>#include <stdlib.h> #include <io.h>#include <math.h>#include <time.h>#define OK 1#define ERROR 0#define TRUE 1#define FALSE 0#define MAXSIZE 20typedef int S原创 2015-07-20 20:26:37 · 576 阅读 · 0 评论 -
锦标赛排序
锦标赛排序的算法思想与体育比赛类似。 首先将n个数据元素两两分组,分别按关键字进行比较,得到n/2个比较的优胜者(关键字小者),作为第一步比较的结果保留下来, 然后对这n/2个数据元素再两两分组,分别按关键字进行比较,…,如此重复,直到选出一个关键字最小的数据元素为止。 #include#include#include#include#define SIZE 100原创 2015-07-20 17:06:02 · 3345 阅读 · 0 评论 -
拓扑排序(topological-sort)
对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若边(u,v)∈E(G),则u在线性序列中出现在v之前。通常,这样的线性序列称为满足拓扑次序(Topological Order)的序列,简称拓扑序列。 什么是拓扑排序(Topological Sort)?简单地说,由某个集合上的一个偏序得到该集合原创 2015-07-20 16:53:06 · 784 阅读 · 0 评论 -
选择排序(selection sort)
选择排序是从所有序列中先找到最小的,然后放到第一个位置。之后再看剩余元素中最小的,放到第二个位置……以此类推,就可以完成整个的排序工作了。 寻找最小的元素需要一个循环的过程,而排序又是需要一个循环的过程。因此,算法的时间复杂度也是O(n^2)的。在n比较小的情况下,算法可以保证一定的速度,当n足够大时,算法的效率会降低。并且随着n的增大,算法的时间增长很快。因此使用时需要特别注意。这里写代码片#原创 2015-07-20 12:27:17 · 381 阅读 · 0 评论 -
插入排序(InsertSort)
有一个已经有序的数据序列,要求在这个已经排好的数据序列中插入一个数,但要求插入后此数据序列仍然有序,这个时候就要用到一种新的排序方法——插入排序法。 插入排序的基本思想是:每步将一个待排序的纪录,按其关键码值的大小插入前面已经排序的文件中适当位置上,直到全部插入完为止。 直接插入排序是一种简单的插入排序法,其基本思想是:把待排序的纪录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所原创 2015-07-20 10:39:31 · 495 阅读 · 0 评论 -
快速排序(Quicksort)
快速排序(Quicksort)是对冒泡排序的一种改进。 快速排序由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。 算法分析: 设要排序的数组是A[0]……A[N-1],首先任意选取原创 2015-07-14 18:01:57 · 313 阅读 · 0 评论 -
冒泡排序(Bubble sort)
冒泡排序(Bubble Sort)比较简单,这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端,就像烧开了水中的气泡越往上越大。 它的原理是临近的数字两两进行比较,按照从小到大或者从大到小的顺序进行交换,这样一趟过去后,最大或最小的数字被交换到了最后一位,然后再从头开始进行两两比较交换,直到倒数第二位时结束。算法原理:冒泡排序算法的运作如下:(从后往前) 1.比较相邻的元素。如果第原创 2015-07-14 11:53:56 · 587 阅读 · 0 评论 -
算法的时间复杂度分析
算法的时间复杂度分析 & 递归函数时间复杂度分析算法的时间复杂度分析1.算法耗费的时间、语句频度、输入规模 在实际中,一个算法所需耗费的时间 = 算法中所有语句的执行时间之和 而, 每条语句的执行时间= 每条语句执行一次所需时间 * 每条语句的执行次数(语句频度);因为每条语句执行一次所需时间取决于机器执行指令的性能、速度等难以确定的因素,而为了独立于机器的软、硬件系统来分析算法的原创 2015-07-24 00:01:59 · 5952 阅读 · 0 评论