二分算法
蓝桥杯结束了。对于结果现在也看开了。以前认为比赛看重过程就是个笑话,现在突然懂了,比赛果然还是过程重要。这里也将这些日子的一些想法和学习的一些比较经典的算法以及题型再次重温一遍。毕竟过程还是重要的。
下面先讲一个查询的算法。二分算法。
二分算法主要是利用有序数组排序的特点来进行查找元素,通过每次中间指针和查找元素的大小比较,来判断在数组的左边还是右边进行下一步查找。主要是利用到了分治。
代码如下:
1 //二分法算法 2 import java.util.*; 3 public class demo2 4 { 5 public static int rank(int key,int[] a) 6 { 7 int lo=0;//左指针 8 int hi=a.length-1;//右指针 9 while (lo<=hi) 10 { 11 //还有一种(hi-lo)/2+lo 和下面的一样 12 int mid=(lo+hi)/2; 13 if(key<a[mid]) 14 hi=mid-1;//移动右指针,不需要再次查找第mid个元素 15 else if(key>a[mid]) 16 lo=mid+1;//移动左指针 17 else 18 return mid; 19 } 20 return -1; 21 } 22 public static void main (String args[]) 23 { 24 //可以做一个排序的函数,这里只是简单的二分法 25 int a[]={1,2,3,4,5,6,7,8}; 26 System.out.print(rank(5, a)+1); 27 } 28 29 }
以上就是二分算法,这里算法的实现也可以使用递归。使用递归代码会简洁一些,也容易看懂。使用递归主要注意参数的变化。这个以后再提。