Java常用类——数组排序(冒泡排序、选择排序)和二分查找

一、Arrays 类

1、Arrays 类

  • 针对数组操作的工具类
  • 提供了排序查找的功能

2、成员方法

  • public static String toString(int[] a)
  • public static void sort(int[] a)
  • public static int binarySearch(int[] a,int key)

二、数组排序——冒泡排序

1、冒泡排序

  • 相邻元素两两比较,大的往后放,第一次完毕,最大值出现在了最大索引处
    Java常用类——数组排序(冒泡排序、选择排序)和二分查找_第1张图片

2、冒泡排序代码:

    package shuzu;
    
    public class ArrayDm {
     
        public static void main(String[] args){
     
            int[] arr = {
     90,12,54,3,76,15};//定义一个数组
            System.out.println("数组排序前:");
            printArray(arr);
    
            bubbleSort(arr);
            System.out.println("排序后:");
            printArray(arr);
        }
    
        public static void bubbleSort(int[] arr) {
     
             for (int i = 0; i < arr.length -1; i++){
     
                 for (int j = 0; j < arr.length - 1 - i; j++){
     
                     if (arr[j] > arr[j + 1]){
     
                         int temp = arr[j];
                         arr[j] = arr[j + 1];
                         arr[j + 1] = temp;
                     }
                 }
             }
        }
    
        public static void printArray(int[] arr) {
     
            System.out.println("[");
            for (int i = 0; i < arr.length; i++){
     
                if(i == arr.length - 1){
     
                    System.out.println(arr[i]);
                }else{
     
                    System.out.println(arr[i] + ",");
                }
            }
        }
    }

3、把字符串中的字符进行排序

    package shuzu;
    
    public class ArrayDm {
     
        public static void main(String[] args) {
     
            String s = "fdeacbg";//定义一个字符串
            char[] arr = s.toCharArray();//把字符串转换成数组
            paixu(arr);//把字符数组进行排序
            String result = String.valueOf(arr);//把排序后的字符数组转成字符串
            System.out.println(result);//输出字符串;
        }
    
        private static void paixu(char[] arr) {
     //冒泡排序
            for (int i = 0; i < arr.length - 1; i++){
     
                for (int j = 0; j < arr.length - 1 - i; j++) {
     
                    if (arr[j] > arr[j + 1]) {
     
                        char temp = arr[j];
                        arr[j] = arr[j + 1];
                        arr[j + 1] = temp;
                    }
                }
            }
        }
    }

三、数组排序——选择排序

1、选择排序

  • 从0索引开始,依次和后面的元素比较,小的往前放,第一次完毕,最小值出现在了最小索引处

Java常用类——数组排序(冒泡排序、选择排序)和二分查找_第2张图片
2、选择排序代码

    package shuzu;
    
    public class ArrayDm {
     
        public static void main(String[] args) {
     
            // 定义一个数组
            int[] arr = {
      24, 69, 80, 57, 13 };
            System.out.println("排序前:");
            printArray(arr);
    
            //用方法改进
            selectSort(arr);
            System.out.println("排序后:");
            printArray(arr);
        }
    
        public static void selectSort(int[] arr){
     
            for(int x=0; x<arr.length-1; x++){
     
                for(int y=x+1; y<arr.length; y++){
     
                    if(arr[y] <arr[x]){
     
                        int temp = arr[x];
                        arr[x] = arr[y];
                        arr[y] = temp;
                    }
                }
            }
        }
    
        // 遍历功能
        public static void printArray(int[] arr) {
     
            System.out.print("[");
            for (int x = 0; x < arr.length; x++) {
     
                if (x == arr.length - 1) {
     
                    System.out.print(arr[x]);
                } else {
     
                    System.out.print(arr[x] + ", ");
                }
            }
            System.out.println("]");
        }
    }

四、二分查找

1、概念
Java常用类——数组排序(冒泡排序、选择排序)和二分查找_第3张图片
2、代码

    package shuzu;
    
    public class ArrayDm {
     
        public static void main(String[] args) {
     
            //定义一个数组
            int[] arr = {
     11, 22, 33, 44, 55, 66, 77};
    
            //写功能实现
            int index = getIndex(arr, 33);
            System.out.println("index:" + index);
    
            //假如这个元素不存在后有什么现象呢?
            index = getIndex(arr, 333);
            System.out.println("index:" + index);
        }
    
        /*
         * 两个明确:
         * 返回值类型:int
         * 参数列表:int[] arr,int value
         */
        public static int getIndex(int[] arr, int value) {
     
            //定义最大索引,最小索引
            int max = arr.length - 1;
            int min = 0;
    
            //计算出中间索引
            int mid = (max + min) / 2;
    
            //拿中间索引的值和要查找的值进行比较
            while (arr[mid] != value) {
     
                if (arr[mid] > value) {
     
                    max = mid - 1;
                } else if (arr[mid] < value) {
     
                    min = mid + 1;
                }
    
                //加入判断,返回-1说明找不到
                if (min > max) {
     
                    return -1;
                }
    
                mid = (max + min) / 2;
            }
    
            return mid;
        }
    }

直接调用Java二分查找工具类

    package shuzu;
    
    import java.util.Arrays;//直接调用Java工具类
    
    public class ArrayDm {
     
        public static void main(String[] args) {
     
            // 定义一个数组
            int[] arr = {
      24, 69, 80, 57, 13 };
    
            //System.out.println(Arrays.toString(arr));
    
            // public static String toString(int[] a) 把数组转成字符串
            System.out.println("排序前:" + Arrays.toString(arr));
    
            // public static void sort(int[] a) 对数组进行排序
            Arrays.sort(arr);
            System.out.println("排序后:" + Arrays.toString(arr));
    
            // [13, 24, 57, 69, 80]
            // public static int binarySearch(int[] a,int key) 二分查找
            System.out.println("binarySearch:" + Arrays.binarySearch(arr, 57));
            System.out.println("binarySearch:" + Arrays.binarySearch(arr, 577));
        }
    }

你可能感兴趣的:(Java,数组(arrays)类,数组排序,二分查找)