基础的常见算法

  1. 冒泡排序算法
public class Process09 {
    public static void main(String[] args) {
        int[] score = {9,8,7,6,5} ;
        // 排序次数:最多 length - 1 次
        for (int i = 0 ; i < score.length -1 ; i ++){
            // 当前排序的集合区间,排序完一个数据就放弃一个
            for (int j = 0 ; j < score.length - i - 1 ; j++){
                // 冒泡排序:把结果大的向后扔
                if (score[j] > score[j+1]){
                    int temp = score[j] ;
                    score[j] = score[j+1] ;
                    score[j+1] = temp ;
                }
            }
        }
        // 输出排序后的结果集
        for (int i = 0 ; i < score.length ; i++){
            System.out.print(score[i]);
        }
    }
}
  1. 排列组合算法
    有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
public class Process10 {
    public static void main(String[] args) {
        arrange() ;
    }
    public static void arrange (){
        int i=0; // 百位数
        int j=0; // 十位数
        int k=0; // 个位数
        int t=0; // 计数器
        for (i = 1 ; i <= 4 ; i++){
            for (j = 1 ; j <= 4 ; j++){
                for (k = 1 ; k <=4 ; k++){
                    if (i != j && j != k && k != i){
                        t += 1 ;
                        System.out.print(i*100+j*10+k+"--");
                    }
                }
            }
        }
        System.out.println();
        System.out.println("t="+t);
    }
}
  1. 递归常见算法
public class Process11 {
    public static void main(String[] args) {
        System.out.println(getSumOne(100));
        System.out.println(getSumTwo(30));
        System.out.println(getSumThree(5));
    }
    /**
     * 使用递归的方式计算1+2+...+100
     */
    public static int getSumOne (int i){ // 传入100
        int sum ;
        if (i == 1){
            return 1 ;
        }
        else {
            sum = i + getSumOne(i - 1) ;
        }
        return sum ;
    }
    /**
     * 一列数的规则如下: 1、1、2、3、5、8、13、21、34...
     * 求第30位数是多少, 用递归算法实现
     */
    public static int getSumTwo (int i){ // 传入第几位数下标
        if (i <= 0){
            return 0 ;
        } else if (i == 1 || i == 2){ // 处理前面2位的1,1
            return 1 ;
        } else { // 当前位数是前两位之和
            return getSumTwo(i - 1) + getSumTwo(i - 2) ;
        }
    }
    /**
     * 1*2*3*...*100 递归计算阶乘
     */
    public static int getSumThree (int i){
        if (i == 1){
            return i ;
        } else {
            return i * getSumThree (i - 1) ;
        }
    }
}
posted @ 2021-09-11 09:37  程序员波特  阅读(65)  评论(0)    收藏  举报