栋哥带你学Java数组排序和二分查找

数组的排序

一、冒泡排序

注意:只讲java中最常用的两种排序,不喜勿喷.
冒泡排序的核心思想:相连两个数进行比较 然后交换位置
int[] array = new int[]{3, 2, 5, 7, 1};
// 注意 内循环-1 防止数组越界
// 外循环 -1 代表 5个数 比较4趟 比较数组长度-1趟
// 内循环 -i 每一趟都少比一次
// 外循环相当于 比较多少趟
// 内循环相当于 一趟比多少次
for (int i = 0; i < array.length - 1; i++) {
    for (int j = 0; j < array.length - 1 - i; j++) {
        if(array[j] > array[j + 1]) {
            int temp = array[j];
            array[j] = array[j + 1];
            array[j + 1] = temp;
        }
    }
}

二、选择排序

选择排序的核心思想:选择一个数和下一个数比较换位(基本上都是默认数组的第一个数跟后面的数进行比较)
int[] array = new int[]{3, 2, 5, 7, 1};
for (int i = 0; i < array.length - 1; i++) {            
    for (int j = i + 1; j < array.length; j++) {
        int select = array[i];
        if (select > array[j]) {                
            array[i] = array[j];
            array[j] = select;
        }
    }
}

三、系统自带的排序和排序后的输出

这里介绍一下系统已经写好的排序方法
Arrays.sort(array);这里的array就是自己定义的数组名
要点:这个排序是升序的,上面介绍的冒泡和选择排序也是升序的,如果要降序的话就把if里面的 > 改成 <就行了.
给数组排完序后有输出的方法:
1.再遍历一次数组然后打印输出
代码如下:
for(int i = 0; i < array.length; i++){
    System.out.println(array[i]);
}
2.用系统的已经写好的方法输出
System.out.println(Arrays.toString(array));

二、二分查找(折半查找)

前提:数组中查找 查找这个数在数组中的角标
注意: 在有序的数组中查找
优势:省时间
// 定义一个有序的一维数组
int[] array = new int[]{3, 6, 9, 12, 18, 22, 33};
// 数组最值下标
int min = 0;
// 数组最大下标
int max = array.length - 1;
// 中间值下标
int mid = (min + max) / 2;
// 要查找的值
int key = 12;
/*
 * 循环查找
 * array[mid] != key
 */
while (array[mid] != key) {
    // 比较 如果比中间角标大 挪动最小下标
    // 如果比中间角标小 挪动最大下标
    if (key > array[mid]) {
        min = mid + 1;
    }else if (key < array[mid]) {
        max = mid - 1;
    }
    // 挪动完下标后 还要进行折半操作
    mid = (max + min) / 2;
    // 当最大下标小于最小下标的时候 说明数组中没有这个数
    if(max < min) {
        // 进到这里说明没这个数 停止循环
        mid = -1;
        break;
    }
}
System.out.println(mid);

你可能感兴趣的:(Java)