数组中涉及到的常见算法

简介: 数组中涉及到的常见算法

1.1 两类排序


(1)内排序:指待排序列完全存放在内存中所进行的排序。内排序大致可分为五类:插入排序、交换排序、选择排序、归并排序和分配排序。

(2)外排序:指排序过程中还需访问外存储器的排序。为了以后讨论方便,我们直接将排序码写成一个一维数组的形式,并且在没有声明的情形下,所有排序都按排序码的值递增排列。


1.2 数组中涉及到的常见算法


1.数组元素的赋值(杨辉三角、回形数等)

2.求数值型数组中元素的最大值、最小值、平均数、总和等

3.数组的复制、反转、查找(线性查找、二分法查找)

4.数组元素的排序算法


1.1 杨辉三角


package com.pyy.contact;
/*
 * 杨辉三角要满足的条件是
 * yanghui[i][j] = yanghui[i-1][j] + yanghui[i-1][j-1];
 */
public class YangHuiTest {
  public static void main(String[] args) {
    // 1.声明并初始化二维数组
    int[][] yangHui = new int[10][];
    // 2.给数组的元素赋值
    for (int i = 0; i < yangHui.length; i++) {
      yangHui[i] = new int[i + 1]; // 第一行一个元素,第二行二个元素...
      // 2.1给首末元素赋值
      yangHui[i][0] = yangHui[i][i] = 1;
      // 2.2给每行的非首末元素赋值
      for (int j = 1; j < yangHui[i].length - 1; j++) {
        yangHui[i][j] = yangHui[i - 1][j] + yangHui[i - 1][j - 1];
      }
    }
    // 3.遍历数组
    for (int i = 0; i < yangHui.length; i++) {
      for (int j = 0; j < yangHui[i].length; j++) {
        System.out.print(yangHui[i][j] + " ");
      }
      System.out.println();
    }
  }
}


1.2 输出数组中最大、最小、和、平均数的值


定义一个int型的一维数组,包含10个元素,分别赋一些随机整数,然后求出所有元素的最大值,最小值,和值,平均值,并输出出来。

要求:所有随机数都是两位数。

如何通Math.random()获得指定取区间的数字

Math.random():[0.0,1)

Math.random()*90:[0.0,90.0)

(int)(Math.random()*90):[0,89]

(int)(Math.random()*90 + 10):[10,99]

公式:获取[a,b]范围的随机数:

(int)(Math.random()*(b-a) + a)

package com.pyy.contact;
/*
 * 定义一个int型的一维数组,包含10个元素,分别赋一些随机整数,
然后求出所有元素的最大值,最小值,和值,平均值,并输出出来。
要求:所有随机数都是两位数。
 */
public class MaxNumber {
  public static void main(String[] args) {
    int[] arr = new int[10];
    for (int i = 0; i < arr.length; i++) {
      arr[i] = (int) (Math.random() * (99 - 10 + 1) + 10);
    }
    // 求数组元素的最大值
    for (int i = 0; i < arr.length; i++) {
      System.out.print(arr[i] + "\t");
    }
    System.out.println();
    // 求数组元素的最大值
    int maxValue = arr[0];
    for (int i = 1; i < arr.length; i++) {
      if (maxValue < arr[i]) {
        maxValue = arr[i];
      }
    }
    System.out.println("最大值为:" + maxValue);
    // 求数组元素的最小值
    int minValue = arr[0];
    for (int i = 1; i < arr.length; i++) {
      if (minValue > arr[i]) {
        minValue = arr[i];
      }
    }
    System.out.println("最小值为:" + minValue);
    // 求数组元素的总和
    int sumValue = 0;
    for (int i = 1; i < arr.length; i++) {
      sumValue += arr[i];
    }
    System.out.println("和为:" + sumValue);
    // 求数组元素平均数
    double avgValue = sumValue / arr.length;
    System.out.println("平均数:" + avgValue);
  }
}


赋值


int [] array1,array2
array1 = new int[]{2,3,4,5,7,6};
array2 = array1

两个不同的变量指向了同一个地址

image.png


复制


array2 = new int[array1.length];
for(int i = 0;i < array2.length;i++){
  array2[i] = array1[i];
}

image.png

我们通过new的方式,给array2在堆空间中新开辟了数组的空间,将array1的元素一个一个的赋值到array2数组中


数组的反转


for(int i = 0;j = arr.length - 1;i<j;i++,j--){
  String temp = arr[i];
  arr[i] = arr[j];
  arr[j] = temp;
}

相关文章
|
2月前
|
算法
Leetcode 初级算法 --- 数组篇
Leetcode 初级算法 --- 数组篇
41 0
|
4月前
|
算法 测试技术
【算法】二分算法——寻找旋转排序数组中的最小值
【算法】二分算法——寻找旋转排序数组中的最小值
|
4月前
|
算法
【算法】二分查找——在排序数组中查找元素的第一个和最后一个位置
【算法】二分查找——在排序数组中查找元素的第一个和最后一个位置
|
2月前
|
算法 程序员 索引
数据结构与算法学习七:栈、数组模拟栈、单链表模拟栈、栈应用实例 实现 综合计算器
栈的基本概念、应用场景以及如何使用数组和单链表模拟栈,并展示了如何利用栈和中缀表达式实现一个综合计算器。
43 1
数据结构与算法学习七:栈、数组模拟栈、单链表模拟栈、栈应用实例 实现 综合计算器
|
2月前
|
存储 算法 定位技术
数据结构与算法学习二、稀疏数组与队列,数组模拟队列,模拟环形队列
这篇文章主要介绍了稀疏数组和队列的概念、应用实例以及如何使用数组模拟队列和环形队列的实现方法。
26 0
数据结构与算法学习二、稀疏数组与队列,数组模拟队列,模拟环形队列
|
6月前
|
存储 算法 Go
算法学习:数组 vs 链表
算法学习:数组 vs 链表
73 0
|
4月前
|
存储 算法 Java
深入算法基础二分查找数组
文章深入学习了二分查找算法的基础,通过实战例子详细解释了算法的逻辑流程,强调了确定合法搜索边界的重要性,并提供了Java语言的代码实现。
深入算法基础二分查找数组
|
4月前
|
算法
【Azure Developer】完成算法第4版书中,第一节基础编码中的数组函数 histogrm()
【Azure Developer】完成算法第4版书中,第一节基础编码中的数组函数 histogrm()
|
4月前
|
算法
【算法】模拟算法——外观数组(medium)
【算法】模拟算法——外观数组(medium)
|
4月前
|
算法
【算法】前缀和——除自身以外数组的乘积
【算法】前缀和——除自身以外数组的乘积