zoukankan      html  css  js  c++  java
  • 数组相关总练习

      3 import java.util.Arrays;
      6 public class ArrayExer4 {
      7     /*
      8     记住:
      9     十大内部排序算法如下:
     10 
     11     选择排序(2种 说明:堆排序要理解排序方法实现思路)
     12         直接选择排序、堆排序
     13     交换排序(2种 说明:这两种需要会手写)
     14         冒泡排序、快速排序
     15     插入排序(3种)
     16         直接插入排序、折半插入排序、Shell排序(也叫希尔排序)
     17     归并排序(1种 说明:要理解排序方法实现思路)
     18     ********* 以上8种是常用的排序 ************
     19     桶式排序
     20     基数排序
     21     ********* 最后这2种是不常用的排序 ************
     22 
     23     理解:
     24     1)衡量排序算法的优劣
     25     时间复杂度、空间复杂度、稳定性
     26 
     27     2)排序的分类:内部排序(内存中)  与   外部排序(需要借助于磁盘)
     28 
     29     3)不同排序算法的时间复杂度
     30     冒泡时间复杂度:O(n^2)  n的平方
     31     快排时间复杂度:O(nlog(n))
     32     堆排序、归并排序
     33      */
     34 
     35     public static void main(String[] args) {
     36         int[] arr = new int[]{34,5,22,-98,6,-76,0,-3};
     37         /*
     38         使用冒泡排序,实现数组的从小到大排序
     39          */
     40 
     41         //长度为8的数组,比较7轮
     42         for (int i = 0; i < arr.length-1; i++) {
     43             //每一轮都是从第一个元素与第二个元素比较,较大者放到右边,依次比较,直到一轮结束时,最后一个元素是最大值,下一轮不参与比较
     44             for (int j = 0; j < arr.length-i-1; j++) {
     45                 int tmp = 0;
     46                 if(arr[j]>arr[j+1]){
     47                     tmp = arr[j];
     48                     arr[j] = arr[j+1];
     49                     arr[j + 1] = tmp;
     50                 }
     51             }
     52             //查看每一轮比较后的数组情况
     53             System.out.println(Arrays.toString(arr));
     54         }
     55 
     56         System.out.println("******************");
     57         /*
     58         反转上面的数组
     59          */
     60 
     61         for (int i = 0,j = arr.length -1; i < j; i++,j--) {
     62             int tmp;
     63             tmp = arr[i];
     64             arr[i] = arr[j];
     65             arr[j] = tmp;
     66         }
     67         System.out.println("反转后的数组" + Arrays.toString(arr));
     68 
     69 
     70         System.out.println("******************");
     71         /*
     72         复制上面的数组
     73          */
     74         int[] arr2 = new int[arr.length];
     75         for (int i = 0; i < arr.length; i++) {
     76             arr2[i] = arr[i];
     77         }
     78         System.out.println("复制后的数组:" + Arrays.toString(arr2));
     79 
     80 
     81         System.out.println("******************");
     82         /*
     83         线性查找:通过遍历方式,一个一个的数据进行比较、查找
     84         适用性:具有普遍适用性。
     85         二分法查找:每次比较中间值与目标值的大小,折半的方式检索
     86         适用性:(前提:数组必须有序)
     87         使用线性查找,从上面的数组中查找22是否存在,如果存在,返回所在位置索引,不存在,输出提示信息
     88          */
     89 //        //查找目前元素值
     90 //        int dest = 2;
     91 //        //判断标志:如果找到了,则为false,如果没有找到,则不变一直依然为true
     92 //        boolean flag = true;
     93 //        for (int i = 0; i < arr2.length; i++) {
     94 //            if(arr2[i] ==dest){
     95 //                System.out.println("数组中存在值为" + dest +  "的元素,其索引是:" + i);
     96 //                //元素找到,判断标志设为false
     97 //                flag = false;
     98 //                break;
     99 //            }
    100 //        }
    101 //        //flag 一直不变为true,这说明程序从没进入上面的if语句,也就是没有找到目前元素
    102 //        if (flag) {
    103 //            System.out.println("抱歉,数组中没有值为" + dest +  "的元素!");
    104 //        }
    105 
    106 
    107         //第二种方式(拓宽思路:就是说i代表索引值不断递增,
    108         // 遍历完所有的元素都没有查找到目标元素值的话,
    109         // 那么最后i递增到循环条件不满足时,提示没有找到就可以了)
    110         int dest = 2;
    111         int i = 0;
    112         for (i = 0; i < arr2.length; i++) {
    113             if(arr2[i] == dest){
    114                 System.out.println("数组中存在值为" + dest +  "的元素,其索引是:" + i);
    115                 break;
    116             }
    117         }
    118         //如果目标元素找到了,那么i肯定是i<arr2.length.
    119         // 如果没有找到,i必然会递增到i == arr2.length的时候
    120         if(i == arr2.length){
    121             System.out.println("抱歉,数组中没有值为" + dest +  "的元素!");
    122         }
    123 
    124         System.out.println("******************");
    125         /*
    126         数组中常见的异常有哪些?举例说明
    127          */
    128 
    129         //ArrayIndexOutOfBoundsException:数组索引越界异常
    130         //合理范围:[0,arr.length-1]
    131         //越界:arr[-1],arr[arr.lenth]
    132 
    133         //NullPointerException:空指针异常
    134         //int[] arr = null;
    135         //arr[0];  空指针异常
    136     }
    137 }
  • 相关阅读:
    [leetcode-671-Second Minimum Node In a Binary Tree]
    [leetcode-667-Beautiful Arrangement II]
    棋盘从左上到右下最小初始值
    [leetcode-666-Path Sum IV]
    [leetcode-665-Non-decreasing Array]
    [leetcode-215-Kth Largest Element in an Array]
    LINQ简记(3):子句
    技巧篇:如何重写基类的事件
    技巧篇:结合反射技术实现多算法动态加密
    龙年新作:水印文字添加工具源码摘要
  • 原文地址:https://www.cnblogs.com/zui-ai-java/p/14220668.html
Copyright © 2011-2022 走看看