数组的常见算法

1.数组的创建与元素的赋值:

杨辉三角(二维数组)、回型数(二维数组)

/*使用二维数组打印一个十行的杨辉三角
【提示】
1.第一行有1个元素,第n行有n个元素
2.每一行的第一个元素和最好一个元素都是1
3.从第三行开始,对于非第一个元素和最后一个元素,即:
yanghui[i][j]=yanghui[i-1][j-1]+yanghui[i-1][j];

*/
public class ArrayExer2 {
    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]=1;
            yanghui[i][i]=1;
            //2.2给每行的非首末元素赋值
            //if (i>1){ //if语句可不写
                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.针对与数值型的数组:

最大值、最小值、总和、平均数等

3.数组的赋值与复制

①赋值:

array2=array1;


如何理解:将array1保存的数组的地址值赋给了array2,使得array1和array2共同指向堆空间中的同一个数组实体


②复制:

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

    }

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

4.数组的反转

数组的反转
        //方式一
        for (int i=0;i<arr.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 temp=arr[i];
             arr[i]=arr[arr.length-i-1];
             arr[arr.length-i-1]=temp;
       }

5.数组中指定元素的查找:搜索、检索

①线性查找:

实现思路:通过遍历的方式,一个一个的数据进行比较、查找。

适用性:具有普遍适用性。

  //线性查找(一个个去找)
    String[] arr2 = new String[]{"梁伟", "梁小伟", "薛瑜", "洪誉琪", "洪誉玲", "洪小琪"};
    String dest = "薛瑜";

    boolean isFlag=true;
    for (int i = 0; i < arr2.length; i++) {//遍历数组
         if (arr2[i].equals(dest)) {//查找相同元素
             System.out.println("找到了指定的元素:位置为:" + i);
             isFlag=false;
             break;
         }
     }

②二分法查找:

实现思路:每次比较中间值,折半的方式检索。

适用性:(前提:数组必须有序)

  //二分法查找:
        //前提:所要查询的数组必须有序。
        int[]arr3=new int[]{-98,-50,-20,-10,16,26,65,87,210,666};
        int dest1=210;
        int head=0;//初始的首索引
        int end=arr3.length-1;//初始的末索引
        boolean isFlag1=true;
        while (head<=end){
            int middle=(head+end)/2;
            if (dest1==arr3[middle]){//直接找到
                System.out.println("找到了指定的元素:位置为:"+middle);
                isFlag1=false;
                break;
            }else if (arr3[middle]>dest1){//找的数值比中间数小 
                end=middle-1;
            }else {
                head=middle+1;
            }
        }
        if (isFlag1){
            System.out.println("很遗憾 ,没有找到该元素");

        }

6.数组的排序算法:

 

理解:

衡量排序算法的优劣:
时间复杂度、空间复杂度、稳定性
排序的分类:内部排序与外部排序
不同排序算法的时间复杂度

手写冒泡排序:

     int[]arr=new int[]{43,56,85,12,-52,65,45,70,12};
        //冒泡排序
        for (int i=0;i<arr.length-1;i++){
            for (int j=0;j<arr.length-1-i;j++){
                if (arr[j]>arr[j+1]){
                    int temp=arr[j];
                    arr[j]=arr[j+1];
                    arr[j+1]=temp;
                }
            }
        }
        for (int i=0;i<arr.length;i++){
            System.out.print(arr[i]+"\t");
        }

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值