数组中涉及的常见的算法(数组中元素的最大值、最小值、总和、平均值;赋值、翻转、线性查找以及二分法查找)

概览:

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

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

3、数组的赋值、翻转、查找(线性查找、二分法查找 )

详细描述

1、详见之前博客(杨辉三角、回形数)

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

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

//求数组中的最大值
int[] arr = new int []{12,-5,35,19,65,-7,6,3};
int temp = 0; //初始化声明temp
for(int i = 0; i<arr.length-1; i++){
if(temp <arr[i]){//如果数组中的值大于temp,则将值赋值给temp
temp= arr[i];
}
}
System.out.print("数组中最大的值为:"+temp);

//求数组中的最小值
int mintemp = arr[0];
for(int i=1;i<arr.length;i++){
if(mintemp>arr[i]){
mintemp=arr[i];
}
}
System.out.print("数组中最小的值为:"+mintemp);

//求平均值
int sum=0;
double avgNum=0;
for(int i = 0;i<arr.length; i++){
sum+=arr[i];
}
avgNum=((double)sum)/arr.length;
System.out.print("平均值为:"+avgNum);
System.out.print("总和为:"+sum);

3、数组的赋值、翻转、查找(线性查找、二分法查找 )

//数组的赋值、翻转
int[] arr1,arr2;
arr1 = new int{45,39,-1,28,61,16,-8,36,5};
for(int i = 0; i<arr1.length;i++){
System.out.print(arr1[i]+"\t");
}
//不能称作数组的复制
arr2=arr1;//赋值arr2变量等于arr1的值,此是将arr1在堆中地址赋值给arr2,与arr1同时指向同一个数组;

//修改arr2中的偶索元素,使其等于索引值

for(int i = 0; i<arr2.length;i++){
if(i%2 == 0){
arr2[i]=i;
}
}

//实现数组元素的复制,则需要初始化声明 arr2
arr2=new int[arr1.length];

for(int i = 0; i<arr1.length;i++){
arr2[i]=arr1[i];
}

//数组的翻转  方法1
for(int i =0;i<arr1.length/2;i++){
   for(int j = 0;j<arr1.length-1-i){
int temps=arr1[j];
arr1[j]=arr1[arr1.length-1-i]
arr1[arr1.length-1-i]=temps;
}
}

//数组的翻转  方法2
for(int i=0,j=arr1.length-1;i<j;i++,j--){
int temp = 0;
temp=arr1[i];
arr1[i]=arr1[j];
arr1[j]=temp;
}

3.1数组的查找(线性查找、二分法查找)

//线性查找以及二分法查找

//线性查找
String arry[] = new String[]{"AA","BB","DD","GG","SS","QQ"};
Stirng temp="DD";
boolean isFlag = true;
for(int i = 0;i<arry.length;i++){
if(temp.equals(arry[i])){
System.out.print("已找到,索引位置为"+i);
isFlag=false;
break;
}
}
if(isFlag){
System.out.print("很遗憾,没找到!");
}

//二分法查找   具有局限性,只能查找有序的数组元素
//定义一个首坐标,一个尾坐标,一个中间坐标
//定义一个整形数组
 int[] arry1 = new int[]{-2, 73, 16, 82, 29, 43, -9, -3, 3};
        int searchNum = 16;
        int startFlag = 0;
        int endFlag = arry1.length - 1;
        boolean isFlags = true;

        for (int i = 0; i < arry1.length; i++) {

            while (startFlag <= endFlag) {
                int middleFlag = (startFlag + endFlag) / 2;//初始化证明int型,除不尽则选择左侧值
                if (arry1[middleFlag] == searchNum) {
                    System.out.print("找到啦,索引位置为" + middleFlag);
                    isFlags = false;
                    break;
                } else if (searchNum < arry1[middleFlag]) {
                    endFlag = middleFlag - 1;
                } else {
                    startFlag = middleFlag + 1;
                }
            }

        }

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值