JavaSE-数组的算法

数组的算法

在Java中,数组是一种基本的数据结构,常用于实现各种算法。以下是一些常见的与数组相关的算法:

  1. 排序算法:

    • 冒泡排序(Bubble Sort)
    • 选择排序(Selection Sort)
    • 插入排序(Insertion Sort)
    • 快速排序(Quick Sort)
    • 归并排序(Merge Sort)
    • 堆排序(Heap Sort)
  2. 搜索算法:

    • 线性搜索(Linear Search)
    • 二分搜索(Binary Search)- 需要数组是有序的
  3. 数学算法:

    • 找到最大/最小元素
    • 求和、平均数
    • 标准差、方差等统计计算
  4. 动态编程算法:

    • 矩阵链乘问题
    • 背包问题
    • 最长公共子序列
  5. 字符串处理算法:

    • 字符串匹配算法(如KMP算法)
    • 排序字符串数组
  6. 数组变换算法:

    • 反转数组
    • 旋转数组
    • 数组元素的循环移位
  7. 查找重复元素:

    • 使用哈希表或排序后查找
  8. 集合操作:

    • 并集、交集、差集
  9. 图算法中的数组应用:

    • 邻接矩阵表示图
    • 深度优先搜索(DFS)和广度优先搜索(BFS)中的访问标记数组
  10. 特殊问题算法:

    • 荷兰国旗问题(对数组进行三向切分)
    • 找出数组中的第k大(小)元素

示例:冒泡排序

以下是一个简单的冒泡排序算法的Java实现:

void bubbleSort(int[] arr) {
    int n = arr.length;
    //两个for循环,外层循环用来遍历数组'i-1',内层循环用来将已经排好序的变量减去'j-i-1'
    for (int i = 0; i < n - 1; i++) {
        for (int j = 0; j < n - i - 1; j++) {
            if (arr[j] > arr[j + 1]) {
                // 交换 arr[j] 和 arr[j + 1]
                int temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            }
        }
    }
}

示例:二分搜索

二分搜索要求数组是预先排序的:

int binarySearch(int[] arr, int x) {
    int l = 0, r = arr.length - 1;
    while (l <= r) {
        int m = l + (r - l) / 2;
 
        // 检查x是否位于中点
        if (arr[m] == x) {
            return m;
        }
 
        // 如果x大于中点元素,则在右侧查找
        if (arr[m] < x) {
            l = m + 1;
        }
 
        // 如果x小于中点元素,则在左侧查找
        else {
            r = m - 1;
        }
    }
    return -1; // x不存在于数组中
}

数组算法是计算机科学和编程中的核心内容,掌握这些算法对于解决各种编程问题至关重要。Java标准库也提供了一些内置的数组操作,例如 Arrays.sort()Arrays.binarySearch(),它们在很多情况下可以简化编程任务。

posted @ 2024-08-05 20:12  柒寒(平安)  阅读(29)  评论(0)    收藏  举报