• 基础算法


    一、全排列

     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);
  • 相关阅读:
    Git的常用命令收集
    【Android界面实现】使用ScrollingTabsView实现有滑动标签的ViewPager效果
    android ViewPager中页面延迟加载的实现
    android 项目快速修改包名
    Json详细使用(二) 序列话和反序列话
    Json的详细使用(一)处理数组/List/Map
    C++ stack around variable....错误
    刷题-滑动窗口类型 求连续数组最大值
    C# 动态绘制扇形图;
    C# livechart使用
  • 原文地址:https://www.cnblogs.com/AardWolf/p/10333782.html
Copyright © 2020-2023  润新知