快速排序使用分治法(Divide and conquer)策略来把一个串行(list)分为两个子串行(sub-lists)。
步骤为:
1,从数列中挑出一个元素,称为 "基准",
2,重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区操作。
3,递归地把小于基准值元素的子数列和大于基准值元素的子数列排序。
4,递归的最底部情形,是数列的大小是零或一,也就是永远都已经被排序好了。虽然一直递...
分类:
编程语言 时间:
2014-06-30 08:19:12
阅读次数:
203
问题:研究表明,在某些应用下,1∶35的比例就会使某些分类方法无效,甚至1∶10的比例也会使某些分类方法无效。
(1)少数类所包含的信息就会很有限,从而难以确定少数类数据的分布,即在其内部难以发现规律,进而造成少数类的识别率低
(2)数据碎片。很多分类算法采用分治法,样本空间的逐渐划分会导致数据碎片问题,这样只能在各个独立的子空间中寻找数据的规律,对于少数类来说每个子空间中包含了很少的数据信息...
分类:
其他好文 时间:
2014-06-29 23:01:55
阅读次数:
251
归并排序(Merge Sort)是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个有序的子序列,再把有序的子序列合并为整体有序序列。
归并排序的具体做法:
把原序列不断地递归等分,直至每等份只有一个元素,此时每等份都是有序的。
相邻等份合并,不断合并,直至合并完全。
二路归并
归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。归并排序最常用的是二路归并,即把两个小的有序的序列和并成一个大的有序序列:合二为一...
分类:
其他好文 时间:
2014-06-27 10:16:41
阅读次数:
315
1Iterable接口实现这个接口的对象被允许成为 "foreach" 语句的目标2 动态规划动态规划的基本思想是将待求解的问题分解为若干个子问题,按顺序求解子问题。前一子问题的解,为后一子问题的求解提供了有用的信息。动态规划算法和分治法的基本思想比较类似,区别在于动态规划解决的问题可以分解为重叠子...
分类:
其他好文 时间:
2014-06-26 12:18:28
阅读次数:
226
问题
快速排序,这是一个经典的算法,本文给出几种python的写法,供参考。
特别是python能用一句话实现快速排序。
思路说明
快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序。它采用了一种分治的策略,通常称其为分治法(Divide-and-ConquerMethod)。
(1) 分治法的基本思想
分治法的基本思想是:将原问题分解为若干个规模更小但结构与原...
分类:
编程语言 时间:
2014-06-25 09:02:20
阅读次数:
289
算法一:快速排序算法
快速排序是由东尼·霍尔所发展的一种排序算法。在平均状况下,排序n个项目要Ο(nlogn)次比较。在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见。事实上,快速排序通常明显比其他Ο(nlogn)算法更快,因为它的内部循环(innerloop)可以在大部分的架构上很有效率地被实现出来。
快速排序使用分治法(Divideandconquer)策略来把一个串...
分类:
其他好文 时间:
2014-06-25 08:29:57
阅读次数:
178
归并排序
归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。
算法步骤:
1. 申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列
2. 设定两个指针,最初位置分别为两个已经排序序列的起始位置
3. 比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到...
分类:
其他好文 时间:
2014-06-22 14:22:14
阅读次数:
187
Description: Implement pow(x,n).分析: 求幂次运算,典型的分治算法来解。 因为pow(x,n/2)*pow(x,n/2) 有着重复运算,分治法就会非常快O(log n) 1 class Solution { 2 public: 3 double findval...
分类:
其他好文 时间:
2014-06-21 07:26:08
阅读次数:
162
归并排序是建立在归并操作上的一种有效的排序算法。该算法是採用分治法(Divide and Conquer)的一个很典型的应用。首先考虑下怎样将将二个有序数列合并。这个很easy,仅仅要从比較二个数列的第一个数,谁小就先取谁,取了后就在相应数列中删除这个数。然后再进行比較,假设有数列为空,那直接将还有...
分类:
其他好文 时间:
2014-06-20 15:28:28
阅读次数:
153
分治法的典例
当练手了
神奇的是,使用inplace_merge按说应该是O(n)的算法,但是用sort nlogn的算法反而更快
先上快排版
#include
#include
#include
#include
#include
using namespace std;
const int SIZE = 10000+10;
const double INF = 1...
分类:
其他好文 时间:
2014-06-18 07:17:22
阅读次数:
170