数组相关算法
- 数组元素的赋值(杨辉三角等)
- 求数值型数组中元素的最大值、最小值、平均数、总和等
- 数组的复制、反转、查找(线性查找、二分法查找)
- 数组元素的排序算法
1. 数值型数组相关运算
① 求数组中元素最大值 和 求总和
public static void main(String[] args){
int[] arr1 = new int[]{1,5,4,9,7,6,10};
int maxSum = getMaxNum(arr1);
System.out.println(maxSum);
System.out.println("----------");
getMaxNum1(arr1);
System.out.println("-----------");
int sum = add(arr1);
System.out.println("元素总和为:"+ sum);
// 求数组中的最大值 使用了返回值
public static int getMaxNum(int[] arr){
int max = arr[0]; // 假设第一个元素最大
for (int a : arr){
if (max < a){
max = a;
}
}
return max;
}
// 没有返回值
public static void getMaxNum1(int[] arr){
int max = arr[0]; // 假设第一个元素最大
for (int a : arr){
if (max < a){
max = a;
}
}
System.out.println(max);
}
// 对数组求和
public static int add(int[] arr){
int sum = 0;
for (int a : arr){
sum += a;
}
return sum;
}
}
② 指定数组中查找特定元素
public static void main(String[] args){
int[] arr1 = new int[]{1,5,4,9,7,6,10};
System.out.println("查找特定元素");
int index = findEleInArr(arr1,4); //
System.out.println(index);
// 在指定数组中查找特定元素
public static int findEleInArr(int[] arr,int key){
int index = -1;
for (int i = 0;i < arr.length;i++){
if (key == arr[i]){
index = 1;
System.out.println("索引值:"+ i);
}
}
return index; //找到指定元素输出 1
}
}
③ 删除指定数组中的某一特定元素
public static void main(String[] args){
int[] arr1 = new int[]{1,5,4,9,7,6,10};
System.out.println("删除指定元素");
boolean f = delEle(arr1,4);
System.out.println(f); //判断是否已删除
print(arr1);
// 删除指定数组中的某一个元素
public static boolean delEle(int[] arr,int target){
boolean flag = false;
int index = 0;
for (int i = 0;i<arr.length;i++){
if (target == arr[i]){
index = i;
flag = true;
}
}
for (int i = index;i < arr.length - 1;i++){
arr[i] = arr[i+1];
}
arr[arr.length - 1] = 0;
return flag;
}
// 遍历数组
public static void print(int[] arr){
for (int a : arr){
System.out.println(a);
}
}
}
结果截图:
2. 二分查找
二分查找算法:在数组中查找指定的元素
前提:数组必须是有序的,使用从小到大 (从大到小)
思想:
1.将数组从中间分开 获取数组的中间位置
2.使用key 和中间位置的元素进行比对
3.如果要找元素比中间元素小 意味着 key 存在前半部分
4.如果要找元素比中间元素大 意味着 key 存在后半部分
5.如果要找元素等于中间元素 意味着找到目标元素
示例:
public static void main(String[] args) {
int[] arr = {-99,-54,-2,0,2,33,43,256,999};
int key = 43; //目标元素
int head = 0; //开始位置
int end = arr.length - 1; //结束位置
boolean flag = true;
int middle = -1;
while (head <= end){
middle = (head + end)/2; //中间元素的索引
if (key > arr[middle]){
head = middle + 1;
flag = false;
}else if (key < arr[middle]){
end = middle - 1;
flag = false;
}else { //等于时候的情况
flag = true;
break;
}
}
if (flag){
System.out.println("已找到指定元素,索引值为"+ middle);
}else {
System.out.println("未找到指定元素");
}
}
结果截图: