「这是我参与11月更文挑战的第3天,活动详情查看:2021最后一次更文挑战」。
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
两个不同的变量指向了同一个地址
复制
array2 = new int[array1.length];
for(int i = 0;i < array2.length;i++){
array2[i] = array1[i];
}
我们通过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;
}