zoukankan      html  css  js  c++  java
  • 数组——算法

    1.求数组元素的最大值、最小值、平均数、总和等 -->只对数字类型有效

    核心思想

    通过定义一个变量在循环中循环赋值,然后在操作这个变量就行。

    最大值

    int a =0;

    int[] arr = new int[]{1,5,3,6,7};

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

    if(arr[i] > a){

    a = arr[i];

    }

    }

    最小值

    int a =0;

    int[] arr = new int[]{1,5,3,6,7};

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

    if(arr[i] > a){

    a = arr[i];

    }

    }

    计算总和

    int a = 0;

    int[] arr = new int[]{1,3,4,6,7,3,9};

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

    a+=arr[i];

    }

    计算平均值

    int a = 0;

    int[] arr = new int[]{1,3,4,6,7,3,9};

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

    a+=arr[i];

    }

    int avg = a/arr.length;

    2.数组的复制、反转、查找(线性查找、二分法查找)

    数组的复制

    int[] a = new int[] { 1, 5, 3, 4, 5 };

    int[] b = new int[a.length];

    //便利数组a

    System.out.println("便利a数组的值:");

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

    System.out.print(a[i]+" ");

    }

    System.out.println("");

    //将数组a的值复制个数组b,并做简单修改

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

    b[i] = a[i];

    if (i % 2 == 0) {

    b[i] = i;

    }

    }

    //便利数组b

    System.out.println("便利b数组的值:");

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

    System.out.print(b[i]+" ");

    }

    System.out.println("");

    //二次便利数组a,检查是否复制成功

    System.out.println("二次便利a数组的值:");

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

    System.out.print(a[i]+" ");

    }

    System.out.println("");

    反转

    思路:通过一个临时变量来暂时存放一个值,将首位互换,最后将临时值付给尾

    String[] array = new String[] { "aa", "bb", "cc", "dd" };

    System.out.println("第一次便利:");

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

    System.out.print(array[i] + " ");

    }

    System.out.println();

    // 反转方法一

    // for (int i = 0, j = array.length - 1; i < j; i++, j--) {

    // String a = "";

    // a = array[i];

    // array[i] = array[j];

    // array[j] = a;

    // }

    // 反转方法二

    for (int i = 0; i < array.length / 2; i++) {

    String a = "";

    a = array[i];

    array[i] = array[array.length - i - 1];

    array[array.length - i - 1] = a;

    }

    System.out.println("第二次便利:");

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

    System.out.print(array[i] + " ");

    }

    线性查找

    思路:循环便利数组与要查找的值进行比较。如果相等返回下标,不相等给与说明。(不需要排序)

    String[] array = new String[]{“aa”,”bb”,”cc”,”dd”,”ee”};

    String value = “cc”;

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

    if(array[i].equals(value)){

    System.out.println(“已找到,下标为:” + i + ”);

    break;

    }

    if(i == array.length){

    System.out.println(“未找到”);

    }

    }

    二分法查找

    //二分法查找:要求此数组必须是有序的。

    int[] arr3 = new int[]{-99,-54,-2,0,2,33,43,256,999};

    boolean isFlag = true;

    // int number = 256;

    int number = 25;

    int head = 0;//首索引位置

    int end = arr3.length - 1;//尾索引位置

    while(head <= end){

    int middle = (head + end) / 2;

    if(arr3[middle] == number){

    System.out.println("找到指定的元素,索引为:" + middle);

    isFlag = false;

    break;

    }else if(arr3[middle] > number){

    end = middle - 1;

    }else{//arr3[middle] < number

    head = middle + 1;

    }

    }

    if(isFlag){

    System.out.println("未找打指定的元素");

    }

    3.数组元素的排序

    冒泡排序

    思路:通过双重循环,外层循环控制循环多少次。内存循环用来比较相邻俩个值得大小,将大的值放到一边,每次将大的值放到一边后就不需要再比较了,在下次比较时-i,依次类推

    int[] array = new int[]{1,5,8,-3,6};

    for(int i = 0;i < array.length - 1; i++){//外层控制循环次数

    for(int j = 0;j < array.length - 1 - i;j++){//内存控制比较次数,-i的作用:已经到位的值就不许要在比较了

    if(array[j] < array[j + 1]){//比较俩个相邻值得大小

    int temp = array[j];

    array[j] = array[j + 1];

    array[j + 1] = temp;

    }

    }

    }

    //便利

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

    System.out.print(array[i] + " ");

    }

    选择排序

    int[] array = new int[]{1,5,8,-3,6};

    for (int i = 0; i < arr.length - 1; i++) {//外层控制循环次数

    int index = i;//记录下标

    for (int j = i + 1; j < arr.length; j++) {////内层控制比较次数,-i的作用:已经到位的值就不许要在比较了

    if (arr[j] < arr[index]) {//比较获取最小值得小标

    index = j;

    }

    }

    if (index != i) {//如果最小下标和i相等就表示没有变化

    int tmp = arr[i];

    arr[i] = arr[index];

    arr[index] = tmp;

    }

    }

    //便利

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

    System.out.print(array[i] + " ");

    }

    Arrays工具类的使用

    方法

    事例

    解释

    boolean equals(int[] a,int[] b)

    Arrays.equals(数组1,数组2);

    比较俩个数组是否相等。

    一系列重载的方法。

    String toString(int[] a)

    Arrays.toString(数组名);

    输出数组信息。

    一系列重载的方法。

    void fill(int[] a,int val)

    Arrays.fill(数组名,替换值);

    将指定值填充到数组之中。

    一系列重载的方法。

    void sort(int[] a)

    Arrays.sort(数组名);

    对数组进行升序排序,底层是快速排序。

    一系列重载的方法。

    int binarySearch(int[] a,int key)

    Arrays.binarySearch(数组名,查询值)

    对排序后的数组进行二分法检索指定的值。

  • 相关阅读:
    python 打印出水仙花数
    pycharm 2020 激活码 破解教程
    Python 封装一个函数,查找文字字符串数字英文下标
    Python 分解质因数
    python 封装一个取符串长度的函数
    Python 正整数相加其余忽略
    Python 输入字符串找(String)下标 没有返回-1
    CPU 和 GPU 的区别
    Deferred Shading,延迟渲染(提高渲染效率,减少多余光照计算)【转】
    BumpMap、NormalMap的区别
  • 原文地址:https://www.cnblogs.com/houwenbo/p/11536581.html
Copyright © 2011-2022 走看看