常见的算法
- 
排序算法:冒泡排序、选择排序
 - 
查找算法:二分查找法
 - 
Java中实际上已经封装好了这些算法,例如Java中提供的一个数组工具类:java.util.Arrays中有一个静态方法sort方法。
 - 
对于其中的一些原理请阅读数据结构学习笔记:
①查找算法:数据结构学习第七章查找
②排序算法:数据结构学习第八章排序
 
7.冒泡排序算法
- 
冒泡排序核心思想:
①可以从前往后(也可以从后往前),依次两两比较,不符合规则的即交换。
②经过一趟比较后,已经有一个处于正确的位置,减去这个元素继续冒泡排序。
③有n个元素,经过n-1趟排序后,排序完成。
 - 
用Java实现冒泡排序
 
            
            
              java
              
              
            
          
          public class BubbleSort {
    public static void main(String[] args) {
        int[] arr = {2,5,23,52,1,34};
        for (int i = 0; i < arr.length; i++) {
            System.out.printf(String.valueOf(arr[i]) + " ");	 //2 5 23 52 1 34
        }
        //冒泡排序实现从小到大排序
        for (int i = arr.length-1; i >0; i--) {
            for (int j = 0; j < i; j++) {
                if(arr[j] > arr[j+1]){
                  int temp;
                  temp = arr[j];
                  arr[j] = arr[j+1];
                  arr[j+1]=temp;
            }
        } }
        System.out.println();
        for (int i = 0; i < arr.length; i++) {
            System.out.printf(String.valueOf(arr[i]) + " ");  //1 2 5 23 34 52 
        }
    }
}
        8.选择排序算法
- 
选择排序核心思想:
每次找出最小值与对还未排序的数据元素中第一个元素进行交换。
 - 
用Java实现选择排序算法
 
            
            
              java
              
              
            
          
          public class SelectSort {
    public static void main(String[] args) {
        int[] arr = {2,5,23,52,1,34};
        for (int i = 0; i < arr.length; i++) {
            System.out.printf(String.valueOf(arr[i]) + " ");  //2 5 23 52 1 34 
        }
        //从小到大选择排序
        for (int i = 0; i < arr.length; i++) {
            //记录最小值下标为:第一个元素
            int min = i;
            for (int j = i+1; j < arr.length; j++) {
                if(arr[j]<arr[min]){
                    //遍历后面的元素,如果元素小于最小值,更新最小值下标
                    min = j;
                }
            }
            //遍历完后面的元素,如果最小值有变,这需要更换位置。
            if(min != i){
                int temp;
                temp = arr[min];
                arr[min] = arr[i];
                arr[i] = temp;
            }
        }
        System.out.println();
        for (int i = 0; i < arr.length; i++) {
            System.out.printf(String.valueOf(arr[i]) + " ");  //1 2 5 23 34 52 
        }
    }
}
        9.二分查找
- 普通查找就是一个一个找,也就是把数组从头到尾遍历一次,如果有就返回下标。
 
            
            
              java
              
              
            
          
          public class ArraySearch {
    public static void main(String[] args) {
        int[] arr = {2,5,23,52,1,34};
        int index = Search(arr,52);
        System.out.println(index == -1 ? "该元素不存在!" : "该元素下标是:" + index);   //该元素下标是:3
        int index2 = Search(arr,100);
        System.out.println(index2 == -1 ? "该元素不存在!" : "该元素下标是:" + index2);  //该元素不存在!
    }
    public static int Search(int[] arr,int index){
        for (int i = 0; i < arr.length; i++) {
            if(arr[i] == index){
                return i;//结束当前方法
            }
        }
        return -1;
    }
}
        - 
二分法查找:在已经排序好的算法中进行查找。每次将待查记录的所在区间缩小一半
 - 
二分法查找核心思想:
①设表长n,设置指针low,high和mid分别指向待查元素所在区间的上界、下界和中点,key为要查找的值。
②初始,low=0,high=arr.length-1,mid=(low+high)/2。(注:由于计算机存储原理,若mid有小数部分,则向下取整数)
③让key与mid所指记录比较:
---若key==R[mid].key,查找成功
---若key<=R[mid].key,high=mid-1
---若key>=R[mid].key,low=mid+1
④重复③,直到low>high时,查找失败。
 
            
            
              java
              
              
            
          
          public class ArraySearchTwo {
    public static void main(String[] args) {
        int[] arr = {100,200,235,600,1000,2000,9999 };
        //找出arr这个数组中2000所在的下标
        int index = binarySeary(arr,2000);
        System.out.println(index == -1 ? "该元素不存在" : "该元素的下标为:" + index);//该元素的下标为:5
        int index2 = binarySeary(arr,300);
        System.out.println(index2 == -1 ? "该元素不存在" : "该元素的下标为:" + index2);//该元素不存在
    }
    private static int binarySeary(int[] arr, int dest) {
        //开始下标low
        int low = 0;
        //结束下标high
        int high = arr.length -1;
        while(low <= high){
            int mid = (low + high) / 2;
            if(arr[mid] == dest){
               return mid;
            } else if (arr[mid] < dest) {
               //目标在中间的右边,开始元素下标low变化
               low = mid + 1;
            }else {
            //目标在中间的右边,结束下标high变化
               high = mid - 1;
        }
        }
        return -1;
    }
}
        10. Arrays工具类使用
- 在开发中,java.util.Arrays工具类中的方法在开发中要参考API帮助文档。
 - 使用工具类实现进行二分查找
 
            
            
              java
              
              
            
          
          import java.util.Arrays;
public class Test {
    public static void main(String[] args) {
        int[] arr = {3,6,45,21,47,51,31,4,7};
        //使用工具类排序
        Arrays.sort(arr);
        //输出排序好的结果
        for (int i = 0; i < arr.length; i++) {
            System.out.printf(arr[i] + " ");  //3 4 6 7 21 31 45 47 51 
        }
        System.out.println();
        //二分查找(需要已经排序好的数组),使用工具类
        int index = Arrays.binarySearch(arr,45);
        System.out.println(index == -1 ? "该元素不存在" : "该元素下标:"+index);  //该元素下标:6
    }
}
        ------本章节为个人学习笔记。学习视频为动力节点Java零基础教程视频:动力节点---JAVA零基础教程视频