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 }
  • 相关阅读:
    Ubuntu配置sublime text 3的c编译环境
    ORA-01078错误举例:SID的大写和小写错误
    linux下多进程的文件拷贝与进程相关的一些基础知识
    ASM(四) 利用Method 组件动态注入方法逻辑
    基于Redis的三种分布式爬虫策略
    Go语言并发编程总结
    POJ2406 Power Strings 【KMP】
    nyoj 会场安排问题
    Server Tomcat v7.0 Server at localhost was unable to start within 45 seconds. If the server requires more time, try increasing the timeout in the server editor.
    Java的String、StringBuffer和StringBuilder的区别
  • 原文地址:https://www.cnblogs.com/zui-ai-java/p/14220668.html
Copyright © 2011-2022 走看看