常见算法篇
常见算法总结篇
递归算法
递归算法有一下几个特点
* 递归算法必须设定循环终止条件,称为递归出口
* 方法里调用自身
如下面两个例子:
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;
}
排序算法
快速排序算法 排序步骤总结如下:
* 从数组中挑出一个元素,称为“基准”(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); }