写一个系列的经典算法,共同学习!1.快速排序基本思想:1.先从数列中取出一个数作为基准数。2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。3.再对左右区间重复第二步,直到各区间只有一个数。在网上看到一篇博客,把快速排序命名为 挖坑填数+分治法,感觉很有道理,所以等会程序...
分类:
编程语言 时间:
2015-01-25 21:00:16
阅读次数:
143
归并排序同为分治法,但是与快速排序不同
快速排序更偏向于分,在分的递归过程中的两侧数据交换
而归并排序更偏向于合并,在两半部分合并的递归中的按顺序排序
代码:
root@ubuntu:/mnt/shared/appbox/mgsort# cat mgsort.c
#include
#include
#include
#include
#include
static in...
分类:
编程语言 时间:
2015-01-24 15:57:21
阅读次数:
121
题目:EPI
在本题中,把数组分成左右两部分,分别计算左右两部分的invrted pair的数量,再计算A[i] 和 A[j]一边一个的情况,然后把三者相加。
int count_invert_core(vector &arr,int begin,int end)
{
if (end - begin + 1 < 2)
return 0;
if (end - begin + 1 ...
分类:
编程语言 时间:
2015-01-22 09:36:34
阅读次数:
189
动态规划,其实跟分治法有些相似,基本思想都是将复杂的问题分成数个简单的子问题,然后再去解决。它们的区别在于,分治法关注的子问题不相互“重叠”,而动态规划关注的子问题,多是相互“重叠”的。...
分类:
编程语言 时间:
2015-01-18 11:54:04
阅读次数:
528
归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。 归并过程为:比较a[i]和a[...
分类:
编程语言 时间:
2015-01-18 00:50:00
阅读次数:
257
Implement pow(x,n).分析:分治法。代码如下:class Solution {public: double pow(double x, int n) { if(n < 0) return 1.0/power(x, -n); return power(...
分类:
其他好文 时间:
2015-01-14 22:34:51
阅读次数:
137
高速排序因为排序效率在同为O(N*logN)的几种排序方法中效率较高,因此经常被採用,再加上高速排序思想----分治法也确实有用,因此非常多软件公司的笔试面试,包含像腾讯,微软等知名IT公司都喜欢考这个,还有大大小的程序方面的考试如软考,考研中也经常出现高速排序的身影。总的说来,要直接默写出高速排序...
分类:
编程语言 时间:
2015-01-12 22:21:46
阅读次数:
214
大数乘法即多项式乘法问题,求A(x)与B(x)的乘积C(x),朴素解法的复杂度O(n^2),基本思想是把多项式A(x)与B(x)写成 A(x)=a*x^m+bB(x)=c*x^m+d其中a,b,c,d为x的多项式。则A(x)*B(x)=(ac)*x^2m+(ad+bc)*x^m+bd由ad+bc.....
分类:
编程语言 时间:
2015-01-09 10:41:20
阅读次数:
171
归并排序(Merge)是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列。归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。 将已有序...
分类:
编程语言 时间:
2015-01-04 22:48:45
阅读次数:
264
快速排序的思想是分治法的思想。
一般是按照这个序列的首元素为 mid 基准,把比比mid大的元素放在后面。比 mid 小的元素放前面。然后依次递归,把在 mid 前面的所有元素当成一个新的序列进行刚才的操作,在mid后面的元素看成一个新的序列也进行这样的操作,直到这样得到的序列为一个元素。则排序完成。
当然为基准的元素不一定非要是1:首元素,也可以选2:末尾元素,或者3中间位置元素,4取首、末...
分类:
编程语言 时间:
2015-01-03 22:30:50
阅读次数:
206