目录
一、数组中涉及的常见算法
数组元素的赋值(杨辉三角、回形数等)
求数值型数组中元素的最大值、最小值、平均数、总和等
数组的复制、反转、查找(线性查找、二分法查找)
数组元素的排序算法
1.杨辉三角
package day06;
/*
* 使用二维数组打印一个十行的杨辉三角
*
* 【提示】
* 1.第一行有1个元素,第n行有n个元素
* 2.每一行的第一个元素和最后一个元素都是1
* 3.从第三行开始,对于非第一个元素的最后一个元素的元素。即:
* yanghui[i][j] = yanghui[i-1][j-1] +yanghui[i-1][j];
*
* */
public class Demo {
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-1] +yangHui[i-1][j];
}
}
//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();
}
}
}
2.回形数
package day06;
import java.util.Scanner;
/*从键盘输入一个整数(1~20)
则以该数字为矩阵的大小,把1,2,3…n*n 的数字按照顺时针螺旋的形式填入其中。例如: 输入数字2,则程序输出: 1 2
4 3
输入数字3,则程序输出:
1 2 3
8 9 4
7 6 5
输入数字4, 则程序输出:
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
*/
public class Demo {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("输入一个数字");
int len = scanner.nextInt();
int[][] arr = new int[len][len];
int s = len * len;
/*
* k = 1:向右 k = 2:向下 k = 3:向左 k = 4:向上
*/
int k = 1;
int i = 0, j = 0;
for (int m = 1; m <= s; m++) {
if (k == 1) {
if (j < len && arr[i][j] == 0) {
arr[i][j++] = m;
} else {
k = 2;
i++;
j--;
m--;
}
} else if (k == 2) {
if (i < len && arr[i][j] == 0) {
arr[i++][j] = m;
} else {
k = 3;
i--;
j--;
m--;
}
} else if (k == 3) {
if (j >= 0 && arr[i][j] == 0) {
arr[i][j--] = m;
} else {
k = 4;
i--;
j++;
m--;
}
} else if (k == 4) {
if (i >= 0 && arr[i][j] == 0) {
arr[i--][j] = m;
} else {
k = 1;
i++;
j++;
m--;
}
}
}
// 遍历
for (int m = 0; m < arr.length; m++) {
for (int n = 0; n < arr[m].length; n++) {
System.out.print(arr[m][n] + "\t");
}
System.out.println();
}
}
}
3.最大值、最小值、平均数、总和
package day06;
/*
* 定义一个int型的一维数组,包含10个元素,分别赋一些随机整数,
* 然后求出所有元素的最大值,最小值,和值,平均值,并输出出来。
* 要求:所有随机数都是两位数:
*
* [10,99]
* 公式:(int) (Math.random() * (99 - 10 + 1) + 10);
* */
public class Demo {
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] + " ");
}
// 求数组的最大值
int num = arr[0];
for (int i = 1; i < arr.length; i++) {
if (num < arr[i]) {
num = arr[i];
}
}
System.out.println("\n" + "最大值为:" + num);
// 求数组的最小值
int num2 = arr[0];
for (int i = 1; i < arr.length; i++) {
if (num2 > arr[i]) {
num2 = arr[i];
}
}
System.out.println("\n" + "最小值为:" + num2);
// 求数组的总和
double num3 = 0;
for (int i = 1; i < arr.length; i++) {
num3 += arr[i];
}
System.out.println("\n" + "总和为:" + num3);
// 求数组的平均数
double num4 =0;
num4 = num3 / arr.length;
System.out.println("\n" + "平均数为:" + num4);
}
}
4.复制、反转、查找(线性查找、二分法查找)
package day06;
/*
* 数组的复制、反转、查找(线性查找、二分法查找)
*
* */
public class Demo {
public static void main(String[] args) {
String[] arr = new String[] { "AA", "BB", "CC", "DD" };
// 数组变量的赋值
String[] arr1 = arr; // (修改arr1,arr会跟着变化),arr和arr1有相同的地址值指向同一个堆数据
arr1[0] = "AAA";
System.out.println(arr[0]); // AAA
// 数组的复制(区别于数组变量的赋值:arr1 = arr)
String[] arr3 = new String[arr.length];
for (int i = 0; i < arr.length; i++) {
arr3[i] = arr[i];
}
// 数组的反转
// 方法一:
for (int i = 0; i < arr3.length / 2; i++) {
String temp = arr[i];
arr[i] = arr[arr.length - i - 1];
arr[arr.length - i - 1] = temp;
}
// 方法二:
for (int i = 0, j = arr.length - 1; i < j; i++, j--) {
String temp2 = arr[i];
arr[i] = arr[j];
arr[j] = temp2;
}
// 遍历
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i] + "\t");
}
// 查找
// 线性查找:
String dest = "C";
boolean isFlag = true;
for (int i = 0; i < arr.length; i++) {
if (dest.equals(arr[i])) {
System.out.println("找到了指定的元素,位置为" + i);
isFlag = false;
break;
}
}
if (isFlag == true) {
System.out.println("没有找到指定元素!");
}
// 二分法查找:
// 前提:索要查找的数组必须有序----有序
int[] arr2 = new int[] {1,2,3,4,5,6,7,8,9,10,11,12,16,18,84,99};
int dest1 = 77;
int start = 0;// 初始的首索引
boolean isFlag2 = true;
int end = arr2.length - 1;// 初始的末索引
while (start <= end) {
int middle = (start + end) / 2;
if (dest1 == arr2[middle]) {
System.out.println("找到了指定的元素,位置为" + middle);
isFlag2 = false;
break;
} else if (arr2[middle] > dest1) {
end = middle - 1;
} else {
start = middle + 1;
}
}
if (isFlag2 == true) {
System.out.println("没有找到指定元素!");
}
}
}


被折叠的 条评论
为什么被折叠?



