一、全排列
1 //java全排列,r参数可控组合
2 void prim(String s, LinkedList<Character> list, int r, int x){
3 if(s.length() == r)
4 System.out.println(s);
5 else{
6 int len = list.size();
7 for(int i = x; i < len; i++){
8 LinkedList<Character> t = new LinkedList<Character>(list);
9 char re = t.remove(i);
10 prim(s+re+"", t, r, i);
11 //当x位置用0代替时,组合可重复,否则反之
12 t = null;
13 }
14 }
15 }
二、组合
//从a中取k个 的 组合(标记法)
void dfs(int[] a, int[] take, boolean[] f, int num, int k, int x){
if(num == k){
for(int i = 0; i < k; i++)
System.out.print((char)(take[i]+'A'));
System.out.print("
");
return;
}
for(int i = x; i < a.length; i++){
if(!f[i]){
f[i] = true;
take[num] = a[i];
dfs(a, take, f, num+1, k, i);
//当i位置用0代替时,组合可重复,否则反之
f[i] = false;
}
}
}
三、快速排序
1 void Qsort(int list[], int left, int right)
2 {
3 if(left < right)
4 {
5 int t = list[l];
6 int i = left, j = right;
7 while(i != j)
8 {
9 while(i<j && list[j]>=t)
10 j--;
11 Swap(list[i], list[j]); //交换两数
12 while(i<j && list[i]<=t)
13 i++;
14 Swap(list[i], list[j]);
15 }
16 Qsort(list, left, i);
17 Qsort(list, i+1, right);
18 }
19 else
20 return ;
21 }
四、最大公约数和最小公倍数
1 int gcd(int a, int b)///辗转相除法
2 {
3 int mod=a % b;
4 while (mod!=0)
5 {
6 a = b;
7 b = mod;
8 mod = a % b;
9 }
10 return b;
11 }
12 int gcd(int a, int b)//更相减损法
13 {
14 int i = a, j = b;
15 while(i != j)
16 {
17 if(i > j)
18 i -= j;
19 else
20 j -= i;
21 }
22 return i;
23 }
24 公倍数 :a*b/gcd(a, b);