Java经典算法100例

引言

算法作为计算机科学的核心概念之一,是一种解决问题的方法论。在计算机程序设计中,算法的选择和实现直接影响着程序的性能和效率。为了提高程序的质量和效率,我们需要学习和掌握各种经典的算法。

本文将介绍《Java经典算法100例》这本经典著作中的一些算法示例,并提供相应的Java代码。通过这些示例,我们可以了解一些常见的算法思想和解决问题的方法。同时,我们还将使用Markdown语法标识出代码和计算相关的数学公式,并使用流程图语法标识出算法的流程。

1. 二分查找算法

二分查找算法是一种常见的查找算法,它的基本思想是将查找的范围逐渐缩小,直到找到目标元素或查找范围为空。

代码示例

public int binarySearch(int[] array, int target) {
    int low = 0;
    int high = array.length - 1;

    while (low <= high) {
        int mid = (low + high) / 2;
        if (array[mid] == target) {
            return mid;
        } else if (array[mid] < target) {
            low = mid + 1;
        } else {
            high = mid - 1;
        }
    }

    return -1;
}

关于计算相关的数学公式

二分查找算法的关键在于不断缩小查找范围的过程。通过取中间元素的值与目标值进行比较,可以判断目标值在左半边还是右半边。通过不断更新边界值,可以将查找范围逐渐缩小。

流程图

st=>start: 开始
op=>operation: 设置low和high的初始值
cond=>condition: low <= high?
op2=>operation: 计算mid的值
cond2=>condition: array[mid] == target?
op3=>operation: 更新low和high的值
op4=>operation: 返回结果
e=>end: 结束

st->op->cond->op2->cond2
cond2(yes)->op4->e
cond2(no)->cond
cond(no)->e
cond(yes)->op3->cond

2. 快速排序算法

快速排序算法是一种高效的排序算法,它的基本思想是通过将待排序序列划分为较小和较大的两个子序列,然后分别对这两个子序列进行排序,最终将整个序列排序完成。

代码示例

public void quickSort(int[] array, int start, int end) {
    if (start >= end) {
        return;
    }

    int pivot = array[start];
    int i = start;
    int j = end;

    while (i < j) {
        while (i < j && array[j] >= pivot) {
            j--;
        }
        if (i < j) {
            array[i++] = array[j];
        }

        while (i < j && array[i] <= pivot) {
            i++;
        }
        if (i < j) {
            array[j--] = array[i];
        }
    }

    array[i] = pivot;

    quickSort(array, start, i - 1);
    quickSort(array, i + 1, end);
}

关于计算相关的数学公式

快速排序算法的关键在于选取一个基准元素,然后将其他元素分为两个子序列,其中一个子序列中的元素比基准元素小,另一个子序列中的元素比基准元素大。通过递归地对子序列进行排序,最终实现整个序列的排序。

流程图

st=>start: 开始
op=>operation: 选择基准元素
op2=>operation: 划分子序列
op3=>operation: 递归排序子序列
e=>end: 结束

st->op->op2->op3
op3->op2
op2->e

3. 最大公约数算