1.快速排序(QuickSort) 1.1 快速排序是对冒泡排序的一种改进。通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另一部分的所有数据都要小,然后再按照此方法对这两部分数据进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。 2.归并排序(MergeS ...
分类:
编程语言 时间:
2019-08-10 15:43:18
阅读次数:
113
二分搜索算法是分支策略的典型应用,具体是在给定的有n个元素的已排序序列a中找出一个特定元素。 基本思想:将n个元素分为两半,取a[n/2]与x进行比较, 如果x<a[n/2],继续在数组a的左半部分搜索。 如果x>a[n/2],继续在数组a的右半部分搜索。 (图片源自百度图片) 查找算法对比: 1、 ...
分类:
其他好文 时间:
2019-02-28 23:12:22
阅读次数:
393
汉诺塔问题是一个经典问题。 题意理解:有A,B,C三个柱子,将A柱子上的N个盘子(从小到大排列)移到C柱子上,每次只允许移动一个盘子,并且保证每个柱子上的盘子的排列都是从小到大。 分析:由题意可知,如果要将A上的盘子移动到C,那么肯定需要借助C。 首先将A上的盘子从上到下依次编号为1-n。 运用整体 ...
分类:
其他好文 时间:
2019-02-28 21:11:03
阅读次数:
194
1 #include <ctime> 2 #include <iostream> 3 using namespace std; 4 5 template <class Type> 6 void Swap(Type &x,Type &y); 7 8 inline int Random(int x, i ...
分类:
编程语言 时间:
2019-02-26 01:12:20
阅读次数:
242
合并排序: 合并排序算法是用来分治策略实现对n个元素进行排序的算法,其基本思想是:将待排序元素分成大小大致相同的两个子集合, 分别对两个子集合进行排序,最终将排好序的子集合并成要求的排好序的集合。 递归实现如下: 非递归实现如下:方法自个考虑,其实实现起来很简单。 ...
分类:
编程语言 时间:
2019-01-12 19:26:51
阅读次数:
230
分治法 归并排序是完全遵循分治策略的排序算法。什么是分治法? 分治法,即将原问题分解为几个规模较小的子问题,递归的求解这些子问题,之后再合并这些子问题的解,最终得到原问题的解。 归并排序 归并排序遵照分治法的思想,可分为三个步骤: 分解,将大小为$n$的数列分为两个大小为$\frac{n}{2}$的 ...
分类:
编程语言 时间:
2019-01-12 19:01:08
阅读次数:
135
归并排序是利用归并思想实现的排序方法,该算法采用经典的分治策略,即将问题分成一些小的问题然后递归求解,而治的阶段则将分的阶段得到的答案“修补”在一起,即分而治之。具体到排序,分阶段可以理解为递归拆分子序列的过程,递归深度为log2^N;举例: 8 4 5 7 1 3 6 2 8 4 5 7 1 3 ...
分类:
编程语言 时间:
2018-12-31 19:05:42
阅读次数:
210
递归与分治策略 二分搜索技术 我们所熟知的二分搜索算法是运用分治策略的典型例子,针对这个算法,先给出一个简单的案例。 目的:给定已排好序的n个元素a[0:n-1],现要在这n个元素中找出一特定的元素x。 我们首先想到的最简单的是用顺序搜索方法,逐个比较a[0:n-1]中元素,直至找出元素x或搜索遍整 ...
分类:
编程语言 时间:
2018-12-22 01:29:39
阅读次数:
215
选择问题(Selection Problem),即在n个元素的集合中寻找第K小的元素的问题。第K小的元素又叫第K个顺序统计量。有以下几种变体: - 找最大值和最小值;同时找最大和最小值 - 找中位数(第n/2小) - 找任意第K小的元素 - 找Top-K的元素 ...
分类:
其他好文 时间:
2018-11-28 01:08:16
阅读次数:
232
问题:设有n=2^k个选手参加循环赛,要求设计一个满足以下要求比赛日程表: 1)每个选手必须与其它n-1个选手各赛一次; 2)每个选手一天只能赛一次。 ...
分类:
其他好文 时间:
2018-11-27 16:58:45
阅读次数:
391