首页 > 编程语言 >数组的算法

数组的算法

时间:2024-08-05 20:17:35浏览次数:16  
标签:Sort arr int 算法 数组 排序

数组的算法

在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(),它们在很多情况下可以简化编程任务。

标签:Sort,arr,int,算法,数组,排序
From: https://www.cnblogs.com/wjw2003512/p/18343969

相关文章

  • 数组中生成随机数(Random)
    数组中生成随机数(Random)要通过随机数索引来访问数组中的某一个元素,可以使用Java中的Random类来生成一个随机数,然后用这个随机数作为索引来访问数组。以下是一个示例代码,展示了如何实现这一点:importjava.util.Random;publicclassRandomArrayAccess{publicstaticvoidmai......
  • 呵呵算法题
    假定街道是棋盘型的,每格距离相等,车辆通过每格街道需要时间均为timePerRoad;街道的街口(交叉点)有交通灯,灯的周期T(=lights[row][col])各不相同;车辆可直行、左转和右转,其中直行和左转需要等相应T时间的交通灯才可通行,右转无需等待。现给出n*m个街口的交通灯周期,以及起止街口......
  • 时间旅行者:LSTM算法的奥秘大揭秘!
    Hey小伙伴们,今天给大家带来一个超级有趣的主题——LSTM算法的基本结构和公式推导!......
  • 常见的PID的算法及代码示例
    常见的PID的算法及代码示例PID(比例-积分-微分)算法是控制系统中常用的一种反馈控制算法,它通过计算误差的比例、积分和微分来调整控制输入,以达到预定的控制目标。以下是一些常见的PID算法及代码示例:一、常见的PID算法位置式PID算法位置式PID算法直接计算控制量的绝对值,每次输......
  • 贪心算法-活动安排问题
    贪心算法贪心算法总是选择当前看起来最优的选择(局部最优解),希望得到的结果是一个整体最优解。但是,并非总是选择局部最优解就能够得到整体最优解,这一点需要在问题具有贪心选择性和优化子结构时才成立。贪心选择性贪心选择性:第一次做出贪心选择是正确的。优化子结构问题......
  • leetcode200. 岛屿数量C++题解,精美图例和流程图,一题带你弄懂图的dfs遍历算法
    leetcode200.岛屿数量给你一个由‘1’(陆地)和‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。此外,你可以假设该网格的四条边均被水包围。示例1:输入:grid=[[“1”,“1”,“1”,......
  • 数组:性能优化与错误处理的艺术
    引言在编程过程中,我们会发现这么一件事,有时候需要用到很多变量,十个、百个,甚至千个,如果一个个变量都去声明的话,那么工作量是非常大的,也导致代码很臃肿,所以这个时候数组就出现了。数组可以用来存储一系列数据类型一致的数据,这让我们在操作数据的时候会来的更加简易高效,接下来......
  • 代码随想录算法训练营day04之字符串
    题目及链接:344.反转字符串541.反转字符串||卡码网54.替换数字151.翻转字符串里的单词卡码网55.右旋字符串28.找出字符串中第一个匹配项的下标459.重复的子字符串344.反转字符串太简单就不写了541.反转字符串||题意:给定一个字符串s和一个整数k,从字符串开头算起,每......
  • 空域滤波算法
    空域滤波算法是图像处理中用于去除噪声的一类方法,它们直接在图像的像素坐标系中操作,通过分析图像中像素与周围像素的关系来去除噪声。以下是几种常见的空域滤波算法的原理描述及其在MATLAB中的实现代码。  1.均值滤波均值滤波是一种简单的线性滤波方法,它通过替换图像中每个......
  • 【动态规划】力扣918. 环形子数组的最大和
    给定一个长度为n的环形整数数组nums,返回nums的非空子数组的最大可能和。环形数组意味着数组的末端将会与开头相连呈环状。形式上,nums[i]的下一个元素是nums[(i+1)%n],nums[i]的前一个元素是nums[(i-1+n)%n]。子数组最多只能包含固定缓冲区nu......