基础算法

一、全排列

 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);
原文地址:https://www.cnblogs.com/AardWolf/p/10333782.html