Java基础之数组,排序,二分折半查找

数组概述:用于将相同数据类型存储在内存中
声明格式: 元素类型[] 数组名称 = new 元素类型[长度];
创建数组: int arr[] = new int[5];
数组特点:一旦建立,必须 明确长度

内存图
     

常见数组异常
     ArrayIndexOutOfBoundsException     数组角标越界
     NullPointerException     引用型变量没有指向任何实体的时候,就会发生空指针异常     int[] arr = null
     [I@c17164     int[] arr = new int[3]; sop(arr);

遍历:
核心思想: 就是对 角标的操作 ,只要拿到角标,操作数组就易如反掌
用到的属性: length
正向遍历
for(int x=0; x<=arr.length; x++) { }
反向遍历
for(int x=arr.length-1; x>=0; x--) { }

最值:
int[] arr = new int[5];
int max = 0;   如果值为负数,和0比,0就是最大的了,因此要在"内部"比较
for(int x=0; x<arr.length; x++)
{
     if(arr[x] > max)
     {
          max = arr[x];
     }
} //错误的比较方法

元素的比较
int[] arr = new int[5];
int max = arr[0];
for(int x=1; x<arr.length; x++)
{
     if(arr[x] > max)
     {
          max = arr[x];
     }
}
角标的比较
        int[] arr = new int[5];
        int maxIndex = 0;
for(int x=0; x<arr.length; x++)
{
    if(arr[x] > arr[maxIndex])
    {
          maxIndex = x;
    }
}
arr[maxIndex]就是最大值
     

for  ( int  x=0; x<arr. length  ; x++)
{
       int  index = x;
       int  num = arr[x];  
       for (  int  y=x+1; y<arr.  length ; y++)
     {
            if (arr[y] > num)
          {
              index = y;
              num = arr[y];
          }
     }
       if (index != x)
     {
            int  temp = arr[index];
          arr[index] = arr[x];
          arr[x] = temp;
     }
}
封装交换方法
public static void swap( int[] arr, int x, int y )
{
     int temp = arr[x];
     arr[x] = arr[y];
     arr[y] = temp;
}

数组-查找
      /*
        查找指定的数值出现的位置
        明确一:该功能的最终结果是 int
        明确二:该功能在实现的过程中是否需要未知内容参与运算  数组和要找的值    
      */
        public  static  int  getIndex( int [] arr,   int  key)
      {
              for ( int  x=0; x<arr. length ; x++)
            {
                    if (arr[x] == key)
                          return  x;
            }
              return  -1;
      } 

高效率查找-折半(二分)


            int  min = 0;
              int  max = arr. length  -1;
              int  mid = (min + max) / 2;
              while (arr[mid] != key)
            {
                    if (arr[mid] > key)
                        max = mid - 1;
                    else  if  (arr[mid] < key)
                        min = mid + 1;
                  
                  mid = (min + max) / 2;
                  
                    if (min > max)
                          return  -1;  
            }
              return  mid;

折半查找,第二种写法
          int max,min,mid;
          min = 0;
          max = arr.length-1;
          while(max > min)
          {
               mid = (max + min) >> 1;
               if(key > arr[mid])
               {
                    min = mid + 1;
               }
               else if(key < arr[mid])
               {
                    max = mid - 1;
               }
               else
               {
                    return mid;
               }
          }
          return -1;

二维数组
          格式:
               int[][] arr = new int[3][2];
               int[][] arr = new int[3][];
               int[][] arr = {{1,2,3},{4,5},{6,7,8,9}};
          遍历:
          for(int x = 0; x < arr.length; x++)
          {
               for(int y = 0; y < arr[x].length; y++)
               {
                    System.out.print(arr[x][y]);
               }
          }
               求和:
          int sum = 0;
          for(int x = 0; x < arr.length; x++)
          {
               for(int y = 0; y < arr[x].length; y++)
               {
                    sum += arr[x][y];
               }
          }
          System.out.print(sum);
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 下面是一个Java二分查找排序代码实现: ```java public class BinarySearch { public static int binarySearch(int[] arr, int key) { int low = 0; int high = arr.length - 1; while (low <= high) { int mid = (low + high) / 2; if (arr[mid] == key) { return mid; } else if (arr[mid] < key) { low = mid + 1; } else { high = mid - 1; } } return -1; } public static void main(String[] args) { int[] arr = {2, 5, 7, 8, 10, 12}; int key = 8; int index = binarySearch(arr, key); if (index == -1) { System.out.println("元素未找到!"); } else { System.out.println("元素在数组中的位置为:" + index); } } } ``` 这里 `binarySearch` 方法实现了二分查找算法,它接受一个已经排好序的数组 `arr` 和要查找的关键字 `key` 作为参数。函数返回关键字在数组中的索引位置,如果未找到则返回 -1。 在 `main` 函数中,我们定义了一个数组 `arr` 和一个要查找的关键字 `key`,然后调用 `binarySearch` 方法来查找关键字在数组中的位置。如果找到了,就输出它在数组中的位置,否则输出 "元素未找到!"。 ### 回答2: 二分查找(Binary Search)也叫折半查找,是一种高效的查找算法。它的前提是待查找的集合必须是有序的。下面是用Java写一个二分查找排序的代码示例: ```java public class BinarySearch { // 二分查找算法 public static int binarySearch(int[] array, int target) { int low = 0; int high = array.length - 1; while (low <= high) { int mid = (low + high) / 2; if (array[mid] == target) { return mid; // 找到目标元素,返回索引 } else if (array[mid] < target) { low = mid + 1; // 目标元素在右半部分,更新low } else { high = mid - 1; // 目标元素在左半部分,更新high } } return -1; // 未找到目标元素,返回-1 } public static void main(String[] args) { int[] array = { 1, 3, 5, 7, 9, 11 }; // 有序数组 int target = 7; // 目标元素 int index = binarySearch(array, target); if (index != -1) { System.out.println("目标元素" + target + "在数组中的索引为" + index); } else { System.out.println("目标元素" + target + "未在数组中找到"); } } } ``` 以上代码定义了一个名为`BinarySearch`的类,其中包含了一个静态方法`binarySearch`来实现二分查找算法。在`main`方法中,创建了一个有序数组`array`,并指定要查找的目标元素为7。通过调用`binarySearch`方法,返回目标元素在数组中的索引。最后根据返回的索引结果输出查找结果。 以上就是一个用Java实现二分查找算法的例子,通过该算法可以高效地查找有序数组中的元素。 ### 回答3: 二分查找(Binary Search)是一种查找算法,思路是将有序数组分成两部分,通过每次查找中间元素与目标值比较的方式来不断缩小查找范围,最终找到目标值或确定其不存在。 以下是用Java编写的二分查找排序代码: ``` public class BinarySearch { public static int binarySearch(int[] arr, int target) { int left = 0; int right = arr.length - 1; while (left <= right) { int mid = (left + right) / 2; if (arr[mid] == target) { return mid; } else if (arr[mid] < target) { left = mid + 1; } else { right = mid - 1; } } return -1; } public static void main(String[] args) { int[] arr = {1, 2, 3, 4, 5, 6}; int target = 4; int index = binarySearch(arr, target); if (index != -1) { System.out.println("目标值 " + target + " 的索引为 " + index); } else { System.out.println("目标值 " + target + " 不存在于数组中"); } } } ``` 在上述代码中,binarySearch方法使用了迭代的方式来实现二分查找。初始时,left指向数组的第一个元素,right指向数组的最后一个元素。通过计算中间元素的索引mid,将查找范围不断缩小。如果中间元素等于目标值,则返回该元素的索引;如果中间元素小于目标值,则在右侧继续查找;如果中间元素大于目标值,则在左侧继续查找。重复这个过程直到找到目标值或确定其不存在。 在主方法中,创建了一个有序数组arr和目标值target,并调用binarySearch方法来查找目标值在数组中的索引。如果返回的索引不为-1,则表示目标值存在于数组中,打印输出目标值和其对应的索引;否则,表示目标值不存在于数组中,打印输出该信息。 以上就是用Java实现二分查找排序的代码。该算法的时间复杂度为O(log n),其中n为数组的长度。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值