黑马程序员------java学习笔记之数组基础

------- android培训java培训、期待与您交流! ----------

1、(1)数组

        格式:元素类型[ ]  数组名 =  new  元素类型[元素个数或数组长度]

                如:int[ ]  arr = new int[3];( int  arr[ ] = new int[3] )前者更规范。

        数组初始化:

        格式:元素类型[ ]  数组名 =  new  元素类型[ ]{元素,元素,元素……元素}。

                如:int[ ]  arr = new int[ ]{ 1,5,6,4,8,5,2};

                或:int[ ]  arr = { 1,5,,4,78,5,2};

                若不明确数组具体元素个数,定义:int[ ]  arr = new  int[4];

 

    (2)二维数组

                           三种定义方式

                                           Int[] [] x;
                                           Int x[][];
                                           Int[] x[];

             Arr.length  打印的是二维数组的长度 即外围数组里有多少个数组

                 Arr[0].length 打印的是第一个小数组里有多少个元素


 

2、数组在内存中的存储

        数组在内容中分两部分存储:数组名(arr)存储在栈内存中,其中的值是对内存中数组元素的首地址值,指向该数组;而数组元素连续存储在堆内存中,没有对数组初始化,那么默认存放元素是0;如果将数组arr = null(清空),那么在堆内存中的该数组元素将会在一段时间后通过垃圾回收机制释放。

3、数组操作

    数组操作包括获取最值、元素排序(包括选择排序、快速排序、冒泡排序、希尔排序等)、查找(折半查找),在这所有应用中都是对最值的操作,同时数组也应用到进制转换问题中,适合初学者使用。

 1、冒泡排序: 

原理:将序列划分为无序和有序区,不断通过交换较大元素至无序区尾完成排序。

要点:设计交换判断条件,提前结束以排好序的序列循环。

java代码实现:

 

//定义函数,实现冒泡排序,判断每次比较两数的最值(升序先确定最大值)。  

 public static void bubbleSort(int[ ] arr)  

 {  

      //外循环控制比较组数,一共比较:arr.length-1组,每组最值的地址都在变化。  

      for (int i = 0; i

     {  

           //内循环控制每组比较次数,每组比较:arr.length-i-1次。  

           //-i:让每一次比较的元素减少,-1:避免角标越界。  

           for (int j = 0; j

           {  

                 if (arr[j]>arr[j+1])  

                {  

                       int temp  =  arr[j];  

  

                       arr[j]  =  arr[j+1];  

  

                       arr[j+1]   =  temp;  

  

                }  

           }  

      }  

}   

 

 

 

   2、选择排序:

       原理:将序列划分为无序和有序区,寻找无序区中的最小值和无序区的首元素交换,有序区扩大一个,循环最终完成全部排序。

        java代码实现:

 

     //定义函数实现;两数的交换。  
     public static void swap(int[] arr,int a,int b)  
      {  
         int temp  = arr[a];  
          arr[a] = arr[b];  
          arr[b] = temp;  
      }  
     //定义函数,实现选择排序,判断每次两数比较的最值(升序先确定最小值)。  
      public static void selectSort(int[] arr)  
      {  
         //外循环控制比较组数,一共比较:arr.length-1组,每组最值的地址保持不变。  
          for (int i = 0; i
         {  
             //内循环控制每组比较次数,每组比较:arr.length-i-1次。  
              for (int j = i+1; j
              {  
                 if(arr[i]>arr[j]) //降序(arr[i]
                     swap(arr, i, j);  
              }  
         }  
     }  

 

   3>折半查找(二分查找):

        原理:折半查找法是效率较高的一种查找方法。假设有已经按照从小到大的顺序排列好的五个整数a0~a4,要查找的数是X,其基本思想是: 设查找数据的范围下限为l=1,上限为h=5,求中点m=(l+h)/2,用X与中点元素am比较,若X等于am,即找到,停止查找;否则,若X大于 am,替换下限l=m+1,到下半段继续查找;若X小于am,换上限h=m-1,到上半段继续查找;如此重复前面的过程直到找到或者l>h为止。如 果l>h,说明没有此数,打印找不到信息,程序结束。

          java代码实现:

 

 public static int halfSearch(int[] arr,int key)  

     {  

 

        int min = 0,max = arr.length-1,mid; 

         //只要满足最小角标<=最大角标,那么该数组就可以折半。  

        while (min<=max)  

         {  

             mid = (min+max)/2; //mid = (min+max)>>1  

             if (key>arr[mid])  

                 min = mid + 1;  

             else if (key

                 max = mid - 1;  

            //上面条件都不合适,那么就表示找到了该元素在数组中对应的位置,返回mid(中间角标)。  

             else  

                return mid;  

         }  

         //若min>max,那么在该数组中不存在该元素,返回min表示:角标min所标识的是插入该key的位置。  

         return min;  

    }  


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值