A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 温暖的小白   /  2015-5-12 22:18  /  6249 人查看  /  50 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

笔记内容:数组
        笔记来源:毕向东Java基础视频第4天
        正文:
        (都是自己理解的,如果有错误,请包涵,代码都是看了视频自己写的)
            数组:使用来存储数据的集合或容器或者存储同一数据类型的集合或容器。

            格式:创建数组有两种格式
                        1.类型[] 数组名 = new 类型[]{元素,元素,...};
                        2.类型[] 数组名 = {元素,元素,...};

        //选择排序和冒泡排序
  1. class  SortDemo
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 //两种方式定义数组
  6.                 int[] arr  = {18,69,12,186,74,13,10};
  7.                 int[] arr1 = new int[]{123,234,435,12,34,89,128};
  8.                
  9.                 //主函数的输出语句,以字符串形式输出排序前后的数组
  10.                 //在这里输出arr为例

  11.                 //排序前的顺序
  12.                 System.out.println("输出前");
  13.                 String a = showArr(arr);
  14.                 System.out.println(a);
  15.             
  16.                 System.out.println("--------------------------------------");

  17.                 //排序后的顺序
  18.                 System.out.println("输出后");

  19.             selectionSort(arr); //选择排序
  20.                 a = showArr(arr);
  21.                 System.out.println(a);

  22.             bubbleSort(arr);//冒泡排序
  23.                 a = showArr(arr);
  24.                 System.out.println(a);
  25. }
  26.         //数组的遍历
  27.         public static String showArr(int[] arr)
  28.         {
  29.                 String a = "";
  30.                 //遍历数组,将数组元素用字符串连接
  31.                 for(int x=0;x < arr.length;x++)
  32.                 {
  33.                         if (x!=arr.length-1)
  34.                                 a = a + arr[x] + ",";
  35.                         else
  36.                                 a = a + arr[x];
  37.                         }
  38.                 return a;
  39.         }
  40.         //选择排序
  41.         public static void selectionSort(int[] arr)
  42.         {
  43.                 //for外循环控制主动比较的数组项
  44.                 for(int x=0;x<=arr.length-2;x++)
  45.                 {
  46.                         //for内循环控制被比较的数组项
  47.                         for(int y=x+1;y<=arr.length-1;y++)
  48.                         {
  49.                           //判断,如果比较的数据项大于比较的数据项,则交换
  50.                           if (arr[x]>arr[y])
  51.                           {
  52.                                 swap(arr,x,y);
  53.                           }
  54.                         }
  55.                 }
  56.         }

  57.         //冒泡排序
  58.         /*
  59.         冒泡排序原理理解: 从第一个元素开始,每个数组元素都与自己下一个元素比较大小,
  60.                                            如果大于后一个元素,就交换位置,如果不大于,就位置不变,一轮过后
  61.                                            最后一个元素则为最大元素。每轮比较过后,下轮比较就不包括已确认大
  62.                                            小的元素。最后经过 (arr.length-1)次比较,排序完成。
  63.        
  64.         */
  65.         public static void bubbleSort(int[] arr)
  66.         {
  67.                 //确认每轮比较参与的元素(去掉了上一轮中确认最大的元素)
  68.                 for (int x = (arr.length-1); x>0 ;x--)
  69.                 {
  70.                         //从0角标的数组元素开始,每一个元素都与下一个元素比较
  71.                         //大的往后,这样一轮过后,最后一个元素就是最大的了
  72.                         for (int y = 0;y < (arr.length-1);y++)
  73.                         {
  74.                                 if (arr[y] > arr[y+1])
  75.                                 {
  76.                                         swap(arr,y,y+1);
  77.                                 }
  78.                         }
  79.                 }
  80.         }
  81.         public static void swap(int[] arr,int index1,int index2)
  82.         {
  83.             int temp = arr[index1];
  84.                 arr[index1] = arr[index2];
  85.                 arr[index2] = temp;
  86.         }
  87. }
复制代码

//数组的线性查找和二分查找
  1. class ArrSearch
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 int[] arr = new int[] {10,19,21,45,63,84,96};
  6.                 int key = 21;

  7.                 int a = linearSearch(arr,key);//线性查找

  8.                 int a1 = halfSearch(arr,key);//二分查找法

  9.                 System.out.println("线性查找后匹配的数组元素下标是:"+a);
  10.                 System.out.println("二分查找后匹配的数组元素下标是:"+a1);
  11.         }
  12.     /*
  13.            线性查找:就是遍历整个数组,将数组中每个元素都与
  14.            key值校队,匹配成功后将匹配的数组元素的下标返回
  15.            如果遍历整个数组没有匹配元素,就返回-1.
  16.         */
  17.         public static int linearSearch(int[] arr,int key)
  18.         {
  19.                 for (int x=0; x<arr.length-1; x++)
  20.                 {
  21.                         if (key == arr[x])
  22.                         {
  23.                                 return x;
  24.                         }
  25.                 }
  26.                 return -1;
  27.         }

  28.         /*
  29.                 二分查找法:使用此查找该方法的前提是数组是有序的
  30.                                        
  31.                                         方法的思想就是让Key与数组的中间元素相比较:

  32.                                         1.比中间元素大,则查找的范围就变成数组的后一半元素;
  33.                                         2.比中间元素小,则查找的范围就变成数组的前一半元素;
  34.                                         3.跟中间元素匹配。
  35.         */
  36.         public static int halfSearch(int[] arr,int key)
  37.         {
  38.                 int min = 0;
  39.                 int max = arr.length-1;
  40.                 int mid = (min+max)/2;

  41.                 while (key != arr[mid])
  42.                 {
  43.                         if (key>arr[mid])
  44.                         {
  45.                                 min = mid + 1; //因为中间元素已经比较过,所以后移一位
  46.                         }
  47.                         else if(key<arr[mid])
  48.                         {
  49.                                 max = mid - 1; //因为中间元素已经比较过,所以前移一位
  50.                         }
  51.                         //判断如果没有匹配的情况下,二分最后导致min>max
  52.                         if (min>max)
  53.                         {
  54.                                 return -1;
  55.                         }
  56.                         //每一轮mid值都会随min和max改变
  57.                                 mid = (mid+max)/2;
  58.                 }
  59.                
  60.                 return mid;
  61.         }

  62. }
复制代码
    //二维数组
       创建:数据类型[][] 数组名;
      创建二位数组必须明确有多少一维数组;
      二维数组相当于二位数组里的元素是一维数组。
        //二维数组求和
     
  1. class  TwoArry
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 int[][] arr = {{12,13,14},{48,93,109},{23,10,18,95}};

  6.                 int sum = 0;
  7.                 for (int x=0; x<arr.length; x++)
  8.                 {
  9.                         for (int y=0; y<arr[x].length; y++)
  10.                         {
  11.                                 sum += arr[x][y];
  12.                         }
  13.                 }
  14.                 System.out.println(sum);
  15.         }
  16. }
复制代码




回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马