数组

是一种用于存储 多个相同数据类型的存储模型

静态初始化

int [] arr = {1,8,12,3,5,9};
int arr2 [] = {1,8,12,3,5,9};//创建一个长度为6的数组 内容为{}中的值

动态初始化

int [] arr = new int [10];//创建一个长度为10的数组 内容为默认值
arr[0]=11;//给下标为0的元素 赋值11
int num = arr[1];//将下标为1元素的值 赋值给num
int [] [] arr = {{1,2,3},{1,5},{2,3,4,5}};// 创建一个二维数组 内容为{{}}指定
int [] [] arr = new int[3][4];//创建一个 二维数组 其中存放的数组长都为4 共3组
arr[0][1]=11;//给下标为[0][1]的元素 赋值11 第0组中下标为1的元素赋值
int num = arr[2][1];//将下标为[2][1]元素的值 赋值给num
//一维数组的遍历
int [] arr = new arr [10];
for (int i = 0;i
//一维数组
Random rand = new Random();
        int temp=0;
        for (int i = 0;i  随机      的下标
                temp=path[i][j];
                path[i][j]=path[x][y];
                path[x][y]=temp;
            }
        }

算法描述:两两比较 把这轮的最大值放到最后 经过多轮的比较 数组有序

    public static void bubble11( int[] arr) {
        //最多比较length-1趟  最后1趟是有序的
        for (int i = 0; i < arr.length-1; i++) {//控制比较的轮数
            //倒数第二个 和最后一元素比较 后 最后一个无需比较
            for (int j = 0; j < arr.length-1; j++) {//控制每轮的比较 确保每次的最大值排到该轮的最后
                if (arr[j]> arr[j+1]){
                    arr[j]= arr[j+1]+ arr[j];
                    arr[j+1]= arr[j]- arr[j+1];
                    arr[j]= arr[j]- arr[j+1];
                }
            }
        }
    }

1.改变数组有序后 轮数 不到最大值 继续比较的问题

2.改变 每次比较需要比较到 最后一个元素的问题

3.两边同时比较 减少 每趟 比较的次数 (end-begin)次

  public static void bubble3(int[] arr)    {
        int left;
        int right;
        int leftpos=0;//下一次开始的位置
        int rightpos=arr.length-1;//下一次结束的位置
        for (int i = 0; i < arr.length-1; i++) {
            int count =0; //不执行 无效循环
            left=leftpos;
            right=rightpos;
            //往右挑最大 和 记录下一次结束的位置
            for (int j = left+1; j < right; j++) {
                if (arr[j]>arr[j+1]){
                    arr[j]= arr[j+1]+ arr[j];
                    arr[j+1]= arr[j]- arr[j+1];
                    arr[j]= arr[j]- arr[j+1];
                    count++;
                    rightpos=j;
                }
            }
            //往左挑最小 和 记录下一次开始的位置
            for (int j = right; j >left; j--) {
                if (arr[j]< arr[j-1]){
                    arr[j]= arr[j-1]+ arr[j];
                    arr[j-1]= arr[j]- arr[j-1];
                    arr[j]= arr[j]- arr[j-1];
                    count++;
                    leftpos=j;
                }
            }
            //不执行 无效循环
            if (count==0){
               return;
            }
        }

算法描述:每轮取得最小值 放到已排好序的数组后面 经过多轮的挑选 数组有序

    public static void select (int arr[]){
        for (int i = 0; i < arr.length-1; i++) {//控制第几轮比较
            int min=arr[i];
            ///minIndex 必须=i  =0时 当该轮第一个值是 最小值时出错 for if 没有进去 修改minIndex值
            int minIndex=i;
            //获得本次的最小值的索引
            for (int j = i+1; j < arr.length; j++) {
                if (min>arr[j]){
                  minIndex =j;
                }
            }
            //该轮的 第一个数 和 该轮中的 最小值 交换
            min=arr[minIndex];
            arr[minIndex]=arr[i];
            arr[i]=min;
            //第一轮比较后第一个数据有序
        }
    }

要求遍历的数组必须升序

算法描述: 判断一个数是否存在 通过不断缩小(二分)比较的下标范围 来

    public boolean  isExsit (int[] arrSortUP,int serchNum){
        boolean flag = false;
        int left =0;
        int right = arrSortUP.length;
        //通过不断改变 左右下标的值 来缩小值所在的范围 最差 直到 left=right 确定值所在
        while(leftserchNum){
                right=mid-1;
            }
        }
        return flag;
    }

Original: https://www.cnblogs.com/acman-mr-lee/p/16315753.html
Author: ACMAN-Mr.Lee
Title: 数组

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/644394/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球