常见算法总结篇

递归算法

    递归算法有一下几个特点  
    * 递归算法必须设定循环终止条件,称为递归出口
    * 方法里调用自身
    如下面两个例子:
    1. 一个整数,大于0,不用循环和本地变量,按照n,2n,4n,8n的顺序递增,当值大于5000时,把值按照指定顺序输出来。
    例:n=1237
    函数设定如下:
    //编写递归函数
    private static void getNUm(int n){
        //设置递归终止条件
        System.out.printl(n);
        if(n<=5000){
            //调用自身
            getNum(n*2);
            System.out.printl(n);
        }
    }

    2. 第1个人10,第2个比第1个人大2岁,依次递推,请用递归方式计算出第8个人多大?
    程序设定如下
    //n代表传入的人的数量
    private static int getAge(int n){
        //设定递归终止条件
        if(n==1)
            return 10;
        //调用自身并返回;
        return getAge(n-1)+2;
    }

排序算法

  1. 快速排序算法 排序步骤总结如下:

    * 从数组中挑出一个元素,称为“基准”(pivot);
    * 重新排序数组,所有元素比基准值小的摆放在基准前面,所有元素比基准大的摆放在基准的后面
     (相同可以任意放一边)。这个分割之后,该基准就是他的最后的位置,这个称为“分割”操作
    *  递归地把小于基准值元素的子数组和大于基准元素的子数组排序。
    
    下面看一个列子:
        请用快速排序排序下面的数组内的数字:String[] strVoid=new String[]{"11","66","22","0","55","22","0","32"};
    代码设计如下:严格按照上面三个步骤设计
    
    //三个参数,排序的数组,排序左基点,排序右基点
    private static void quickSort(String[] strViod,int left,int right){
         //先判断左右指针是否越界
         if (left>right){
    
             returen;
         }
    
         //定义基准位置,左右移动时的指针以及中间变量  
         String standard,tmp;
         //步骤一:确定基准位置(可以随意)
         standard = strViod[left];
         int i,j;
         i = left;
         j = right;
         //步骤二:初步与基准值比较,确认基准值的左右集合  
         while(i<j){
            //首先进行基准值右侧值的判断,这里建议将String转为int进行判断,别用compareTo进行判断
            while(Integer.parseInt(standard)<=Integer.parseInt(strViod[j]) && i<j){
    
               j--;
            }
            //再进行基准值左侧的判断
            while(Integer.parseInt(standard)>=Integer.parseInt(strViod[i]) && i<j){
               i++;
            }
            //初步跟换基准值左右两侧的值
            if(i<j){
               tmp = strViod[i];
               strViod[i] = strViod[j];
               strViod[j] = tmp;
            }
        }
        //步骤三:进行左右集合的排序,递归调用 
        //重新确认基准位  
        strViod[left] = strViod[i];
        strViod[i] = standard;
        quickSort(strViod,left,j-1);
        quickSort(strViod,j+1,right);
    }