• 技术文章 >Java >java教程

    Java编程中快速掌握搜索算法和排序算法的方法

    PHPzPHPz2023-04-25 17:13:08转载21

    一、搜索算法

    二分算法

    二分算法(Binary Search)又称折半查找,是一种高效的查找算法。它的基本思想是:将有序数组(或集合)一分为二,若当前中间元素等于目标元素,则查找成功;若当前中间元素大于目标元素,则查找左半部分;若当前中间元素小于目标元素,则查找右半部分。重复以上步骤,直到查找到目标元素或查找区间为空,查找失败。

    下面是用Java实现的二分算法:

    public static int binarySearch(int[] arr, int target) {
        if (arr == null || arr.length == 0) {
            return -1;
        }
        int left = 0;
        int right = arr.length - 1;
        while (left <= right) {
            int mid = left + (right - left) / 2;
            if (arr[mid] == target) {
                return mid;
            } else if (arr[mid] > target) {
                right = mid - 1;
            } else {
                left = mid + 1;
            }
        }
        return -1;
    }

    上述方法使用了一组有序的整数数组和一个目标值作为参数,返回目标值在数组中的索引;如果目标值不存在于数组中,就返回 -1。

    算法的核心是 while 循环,它在 left 和 right 满足特定条件的情况下反复执行:

    每次循环时,我们使用 mid = left + (right - left) / 2 计算出中间元素的索引。需要注意的是,我们必须使用 left + right 的形式,而不能使用 (left + right) / 2 的形式,否则可能会导致整数溢出问题。

    二、排序算法

    在Java中,排序算法是通过实现Comparable或Comparator接口来实现的。以下是几种常用的排序算法和它们的实现方法:

    冒泡排序

    冒泡排序是一种简单的排序算法。它的思想是不断地比较相邻的两个元素,如果顺序不对,就交换位置。这个过程就像水泡不断往上升一样,所以叫冒泡排序。

    public static void bubbleSort(int[] arr) {
        int temp;
        for (int i = 0; i < arr.length - 1; i++) {
            for (int j = 0; j < arr.length - i - 1; j++) {
                if (arr[j] > arr[j + 1]) {
                    //交换位置
                    temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                }
            }
        }
    }

    选择排序

    选择排序的思想是,从未排序的元素中选择最小的元素放到已排序的末尾。每次找到最小元素后,与当前未排序的第一个元素交换位置。

    public static void selectionSort(int[] arr) {
        int minIndex;
        for (int i = 0; i < arr.length - 1; i++) {
            minIndex = i;
            for (int j = i + 1; j < arr.length; j++) {
                if (arr[j] < arr[minIndex]) {
                    minIndex = j;
                }
            }
            //交换位置
            int temp = arr[i];
            arr[i] = arr[minIndex];
            arr[minIndex] = temp;
        }
    }

    插入排序

    插入排序的思想是,将未排序元素插入到已排序的合适位置。从未排序的元素中选择一个元素,在已排序的元素中从后往前遍历,如果比已排序的元素小,则向后移动一个位置,继续比较;直到找到比未排序的元素小的位置,然后插入到这个位置。

    public static void insertionSort(int[] arr) {
        int preIndex, current;
        for (int i = 1; i < arr.length; i++) {
            preIndex = i - 1;
            current = arr[i];
            while (preIndex >= 0 && arr[preIndex] > current) {
                arr[preIndex + 1] = arr[preIndex];
                preIndex--;
            }
            arr[preIndex + 1] = current;
        }
    }

    快速排序

    快速排序是一种基于分治思想的排序算法。它选择一个基准点,将数组分成小于等于基准点和大于基准点的两个子数组,然后递归地对两个子数组排序。

    public static void quickSort(int[] arr, int left, int right) {
        if (left < right) {
            int i = left, j = right, pivot = arr[left];
            while (i < j) {
                while (i < j && arr[j] >= pivot) {
                    j--;
                }
                if (i < j) {
                    arr[i++] = arr[j];
                }
                while (i < j && arr[i] <= pivot) {
                    i++;
                }
                if (i < j) {
                    arr[j--] = arr[i];
                }
            }
            arr[i] = pivot;
            quickSort(arr, left, i - 1);
            quickSort(arr, i + 1, right);
        }
    }

    以上就是Java编程中快速掌握搜索算法和排序算法的方法的详细内容,更多请关注php中文网其它相关文章!

    声明:本文转载于:亿速云,如有侵犯,请联系admin@php.cn删除
    专题推荐:Java
    上一篇:如何在Java中应用Mybatis框架? 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • java怎么随机打乱数组顺序• 最常重用的Java异常类有哪些• Java二维数组拷贝的效率比较分析实例• Java类加载器的使用及分类• 怎么在Java中终止一个线程
    1/1

    PHP中文网