算法

递归(Recursion)

定义--一种常见的解决问题的方法,即把问题逐渐简单化。基本思想是“自己调用自己”。

组成--递归头。解答:什么时候不调用自身方法。如果没有头,将陷入死循环。

    递归体。解答:什么时候需要调用自身。

 1 public class A {
 2     public static long factorail(int n){
 3         if(n==1){    //递归头
 4             return 1;
 5         }else{        //递归体
 6             return n*factorail(n-1);
 7         }
 8     }
 9     public static void main(String[] args){
10         System.out.println(factorail(5));
11     }
12 }

 冒泡排序

 1 public class Test {
 2     public static void main(String[] args) {
 3         int[] values = { 3, 1, 6, 2, 9, 0, 7, 4, 5,8 };
 4         sort(values);
 5         System.out.println(Arrays.toString(values)); 
 6     }
 7     public static void sort(int[] values) {
 8         int temp;
 9         for (int i = 0; i < values.length; i++) {
10             for (int j = 0; j < values.length - 1- i ; j++) {
11                 if (values[j] > values[j + 1]) {
12                     temp = values[j];
13                     values[j] = values[j + 1];
14                     values[j + 1] = temp;
15                 }
16             }
17         }
18     }
19 }

二分法查找

 1 public class TestBinarySearch {
 2     public static void main(String[] args) {
 3         //System.out.println(args[1]);
 4         int[] arr = {234,245,77,3,543,67,78,95,378,678,205,753,457,2903,340} ;   
 5         int searchWord = 6780;  //所要查找的数
 6         int searchCount = 0;  //循环的次数
 7         System.out.printf("普通循环查找%d的次数是%d",searchWord,genetalLoop(arr,searchWord));
 8         System.out.printf("二分法查找%d的次数是%d",searchWord,binarySearch(arr,searchWord));
 9     }
10     static int genetalLoop(int[] arr,int searchWord){
11         //普通的循环法,最少需要比较一次,比如查找1,最多需要比较15次,比如8721
12         int searchCount = 0;
13         for(int i=0;i<arr.length;i++){ 
14             searchCount++; 
15             if (searchWord==arr[i]) 
16                 break; 
17         } 
18         return searchCount; 
19     }
20     //int[] arr = {234,245,77,3,543,67,78,95,378,678,205,753,457,2903,340};
21     static int binarySearch(int[] arr,int searchWord){
22         Arrays.sort(arr);  //先对传进来的数组进行排序
23         System.out.println("
"+Arrays.toString(arr));
24         //二分法查找 
25         int iIndex=0; //相当于指针的东西 
26         int iStart=0;  
27         int iEnd=arr.length-1; 
28         int searchCount = 0;
29         for(int i=0;i<arr.length/2;i++) { 
30             searchCount++; 
31             iIndex = (iStart+iEnd)/2; 
32             if(arr[iIndex]<searchWord){ 
33                 System.out.println("aa");
34                 iStart = iIndex; 
35             }else if(arr[iIndex]>searchWord){
36                 System.out.println("bb");
37                 iEnd = iIndex; 
38             }else{ 
39                 break; 
40             } 
41         } 
42         return searchCount; 
43     }
44 }
原文地址:https://www.cnblogs.com/fanyizhan/p/9891290.html