摘要: 快速排序1.算法思想 快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序。它采用了一种分治的策略,通常称其为分治法(Divide-and-ConquerMethod)。(1)分治法的基本思想 分治法的基本思想是:将原问题分解为若干个规模更小但结构与原问题相似的子问题。递归地解这些子问题,然后将这些子问题的解组合为原问题的解。 (2)快速排序的基本思想 设当前待排序的无序区为R[low..high],利用分治法可将快速排序的基本思想描述为: ①分解:在R[low..high]中任选一个记录作为基准(Pivot),以此基准将当前无序区划分为左、右两个较小的子区间R[low..pi. 阅读全文
posted @ 2011-07-10 21:10 Matrix海子 阅读(1871) 评论(0) 推荐(0) 编辑
摘要: 对给出的n个数,求出其所有的排列。思路:对于R={r1,r2,r3.......rn},其全排列可以这样去计算,perm(R)=riperm(R-ri);(1<=i<=n)即以ri为前缀不变,对剩下所有的元素进行排列。即分别以r1,r2,r3,....rn作为前缀不变,对剩下的所有元素进行全排列即为所得到的结果。同理对于perm(R-ri)的求解也是一个相同的过程,因此可以采用递归的思想去解决。#include<iostream>using namespace std;void swap(int &a,int &b){ int temp=a; a=b; 阅读全文
posted @ 2011-07-10 11:08 Matrix海子 阅读(1049) 评论(0) 推荐(0) 编辑
摘要: 在前面已经提到了整数划分的问题,在那个问题中,只需要求出整数划分的个数,如果要求将整数划分的所有划分方法也输出,该如何求解?如对于整数6,输出的结果就应该是: 6 5+1 4+2 4+1+1 3+3 3+2+1 3+1+1 2+2+2 2+2+1+1 2+1+1+1+11+1+1+1+1+1 我们可以采用集合的思维去考虑,比如对于整数6,则初始集合相当于{1,1,1,1,1,1} 从1+1+1+1+1+1到2+1+1+1+1实际上就相当于我从左边那一堆{1,1,1,1,1,1}的集合中拿 两个1出来相加然后再把结果放回集合当中得到{2,1,1,1,1}.若这个时候我继续拿集合里面的两个 1.. 阅读全文
posted @ 2011-07-10 10:11 Matrix海子 阅读(1485) 评论(1) 推荐(1) 编辑