其他分享
首页 > 其他分享> > 三十九、排序与查找

三十九、排序与查找

作者:互联网

1、冒泡排序

1.1 概述

冒泡排序:将一组数据按照升序规则进行排列

冒泡排序原理:相邻的数据两两比较,小的放前面,大的放后面

注意:

  1. 如果有n个数据进行排序,总共需要比较n-1次
  2. 每一次比较完成,下一次的比较就会少一个数据参与

1.2 冒泡排序图解

1.3 代码实现

public class ArrayDemo {
    public static void main(String[] args) {
        //定义一个数组
        int[] arr = {7, 6, 5, 4, 3};
        System.out.println("排序前:" + Arrays.toString(arr));

        // 这里减1,是控制每轮比较的次数
        for (int x = 0; x < arr.length - 1; x++) {
            // -1是为了避免索引越界,-x是为了调高比较效率
            for (int i = 0; i < arr.length - 1 - x; i++) {
                if (arr[i] > arr[i + 1]) {
                    int temp = arr[i];
                    arr[i] = arr[i + 1];
                    arr[i + 1] = temp;
                }
            }
        }
        System.out.println("排序后:" + Arrays.toString(arr));
    }
}

2、选择排序

2.1 概述

2.2 选择排序图解

2.3 代码实现

public class ArrayDemo {
    public static void main(String[] args) {
        //定义一个数组
        int[] arr = {7, 6, 5, 4, 3};
        System.out.println("排序前:" + Arrays.toString(arr));
        
  		// 这里减1,是控制比较的轮数
        for (int x = 0; x < arr.length - 1; x++) {
            // 从x+1开始,直到最后一个元素
            for (int i = x+1; i < arr.length; i++) {
                if (arr[x] > arr[i]) {
                    int temp = arr[x];
                    arr[x] = arr[i];
                    arr[i] = temp;
                }
            }
        }
        
        System.out.println("排序后:" + Arrays.toString(arr));
    }
}

3、二分查找

3.1 数组的二分查找步骤

  1. 定义两个变量,表示要查找的范围。默认min = 0 , max = 最大索引
  2. 循环查找,但是min <= max
  3. 计算出mid的值
  4. 判断mid位置的元素是否为要查找的元素,如果是直接返回对应索引
  5. 如果要查找的值在mid的左半边,那么min值不变,max = mid -1.继续下次循环查找
  6. 如果要查找的值在mid的右半边,那么max值不变,min = mid + 1.继续下次循环查找
  7. 当 min >= max 时,表示要查找的元素在数组中不存在,返回-1.

3.2 二分查找图解

假设有一个给定有序数组(10,14,21,38,45,47,53,81,87,99),要查找50出现的索引

则查询过程如下图所示:

3.3 二分查找代码实现

public static void main(String[] args) {
    int[] arr = {10, 14, 21, 38, 45, 47, 53, 81, 87, 99};
    int index = binarySerach(arr, 38);
    System.out.println(index);
}
/**
         * 二分查找方法
         * @param arr 查找的目标数组
         * @param number 查找的目标值
         * @return 找到的索引,如果没有找到返回-1
         */
public static int binarySerach(int[] arr, int number) {
    int start = 0;
    int end = arr.length - 1;

    while (start <= end) {
        int mid = (start + end) / 2;
        if (number == arr[mid]) {
            return mid ;
        } else if (number < arr[mid]) {
            end = mid - 1;
        } else if (number > arr[mid]) {
            start = mid + 1;
        }
    }
    return -1;  //如果数组中有这个元素,则返回
}

标签:arr,int,mid,三十九,查找,排序,public
来源: https://www.cnblogs.com/6ovo6/p/14951608.html