Java数组高级算法与Arrays类常见操作小结【排序、查找】

 更新时间:2019年03月20日 10:11:55   作者:白杨-M  
这篇文章主要介绍了Java数组高级算法与Arrays类常见操作,结合实例形式总结分析了Java数组常见的排序算法、查找算法相关原理、实现与使用技巧,需要的朋友可以参考下

本文实例讲述了Java数组高级算法与Arrays类常见操作。分享给大家供大家参考,具体如下:

冒泡排序

冒泡排序原理

冒泡排序代码:

package cn.itcast_01;
/*
 * 数组排序之冒泡排序:
 *     相邻元素两两比较,大的往后放,第一次完毕,最大值出现在了最大索引处
 */
public class ArrayDemo {
  public static void main(String[] args) {
    // 定义一个数组
    int[] arr = { 24, 69, 80, 57, 13 };
    System.out.println("排序前:");
    printArray(arr);
    bubbleSort(arr);
    System.out.println("排序后:");
    printArray(arr);
  }
  //冒泡排序代码
  /*总共需要比较数组长度-1次,x < arr.length - 1
   *每一次比较完,下一次就会减少一次元素的比较。第一次比较有0个元素不比,第二次有1个元素不比,,,,所以 y < arr.length - 1 - x
   *两两比较,大的往后放
   * */
  public static void bubbleSort(int[] arr){
    for (int x = 0; x < arr.length - 1; x++) {
      for (int y = 0; y < arr.length - 1 - x; y++) {
        if (arr[y] > arr[y + 1]) {
          int temp = arr[y];
          arr[y] = arr[y + 1];
          arr[y + 1] = temp;
        }
      }
    }
  }
  // 遍历功能
  public static void printArray(int[] arr) {
    System.out.print("[");
    for (int x = 0; x < arr.length; x++) {
      if (x == arr.length - 1) {
        System.out.print(arr[x]);
      } else {
        System.out.print(arr[x] + ", ");
      }
    }
    System.out.println("]");
  }
}

选择排序

选择排序原理图

选择排序代码

package cn.itcast_02;
/*
 * 数组排序之选择排序:
 *     从0索引开始,依次和后面元素比较,小的往前放,第一次完毕,最小值出现在了最小索引处
 */
public class ArrayDemo {
  public static void main(String[] args) {
    // 定义一个数组
    int[] arr = { 24, 69, 80, 57, 13 };
    System.out.println("排序前:");
    printArray(arr);
    //用方法改进
    selectSort(arr);
    System.out.println("排序后:");
    printArray(arr);
  }
  /*
   * 数组排序
   * */
  public static void selectSort(int[] arr){
    for(int x=0; x<arr.length-1; x++){
      for(int y=x+1; y<arr.length; y++){
        if(arr[y] <arr[x]){
          int temp = arr[x];
          arr[x] = arr[y];
           arr[y] = temp;
        }
      }
    }
  }
  // 遍历功能
  public static void printArray(int[] arr) {
    System.out.print("[");
    for (int x = 0; x < arr.length; x++) {
      if (x == arr.length - 1) {
        System.out.print(arr[x]);
      } else {
        System.out.print(arr[x] + ", ");
      }
    }
    System.out.println("]");
  }
}

二分查找法

二分查找法原理

二分法的代码实现:

package cn.itcast_04;
/*
 * 查找:
 *     基本查找:数组元素无序(从头找到尾)
 *     二分查找(折半查找):数组元素有序
 *
 * 分析:
 *     A:定义最大索引,最小索引
 *     B:计算出中间索引
 *     C:拿中间索引的值和要查找的值进行比较
 *       相等:就返回当前的中间索引
 *       不相等:
 *         大  左边找
 *         小  右边找
 *     D:重新计算出中间索引
 *       大  左边找
 *         max = mid - 1;
 *       小  右边找
 *         min = mid + 1;
 *     E:回到B
 */
public class ArrayDemo {
  public static void main(String[] args) {
    //定义一个数组
    int[] arr = {11,22,33,44,55,66,77};
    //写功能实现
    int index = getIndex(arr, 33);
    System.out.println("index:"+index);
    //假如这个元素不存在后有什么现象呢?
    index = getIndex(arr, 333);
    System.out.println("index:"+index);
  }
  /*
   * 两个明确:
   * 返回值类型:int
   * 参数列表:int[] arr,int value
   */
  public static int getIndex(int[] arr,int value){
    //定义最大索引,最小索引
    int max = arr.length -1;
    int min = 0;
    //计算出中间索引
    int mid = (max +min)/2;
    //拿中间索引的值和要查找的值进行比较
    while(arr[mid] != value){
      if(arr[mid]>value){
        max = mid - 1;
      }else if(arr[mid]<value){
        min = mid + 1;
      }
      //加入判断
      if(min > max){
        return -1;
      }
      mid = (max +min)/2;
    }
    return mid;
  }
}

Arrays类

package cn.itcast_05;
import java.util.Arrays;
/*
 * Arrays:针对数组进行操作的工具类。比如说排序和查找。
 * 1:public static String toString(int[] a) 把数组转成字符串
 * 2:public static void sort(int[] a) 对数组进行排序
 * 3:public static int binarySearch(int[] a,int key) 二分查找
 */
public class ArraysDemo {
  public static void main(String[] args) {
    // 定义一个数组
    int[] arr = { 24, 69, 80, 57, 13 };
    // public static String toString(int[] a) 把数组转成字符串
    System.out.println("排序前:" + Arrays.toString(arr));
    // public static void sort(int[] a) 对数组进行排序
    Arrays.sort(arr);
    System.out.println("排序后:" + Arrays.toString(arr));
    // [13, 24, 57, 69, 80]
    // public static int binarySearch(int[] a,int key) 二分查找
    System.out.println("binarySearch:" + Arrays.binarySearch(arr, 57));
    System.out.println("binarySearch:" + Arrays.binarySearch(arr, 577));
  }
}

PS:这里再为大家推荐几款相似的在线工具供大家参考:

在线动画演示插入/选择/冒泡/归并/希尔/快速排序算法过程工具:
http://tools.jb51.net/aideddesign/paixu_ys

在线JS常见遍历方式性能分析比较工具:
http://tools.jb51.net/aideddesign/js_bianli

更多关于java相关内容感兴趣的读者可查看本站专题:《Java数组操作技巧总结》、《Java字符与字符串操作技巧总结》、《Java数学运算技巧总结》、《Java数据结构与算法教程》及《Java操作DOM节点技巧总结

希望本文所述对大家java程序设计有所帮助。

相关文章

  • 通过spring注解开发,简单测试单例和多例区别

    通过spring注解开发,简单测试单例和多例区别

    这篇文章主要介绍了通过spring注解开发,简单测试单例和多例区别,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • java生成随机数(字符串)示例分享

    java生成随机数(字符串)示例分享

    这篇文章主要介绍了java生成随机数(字符串)示例分享,需要的朋友可以参考下
    2014-03-03
  • 详解SpringMVC的url-pattern配置及原理剖析

    详解SpringMVC的url-pattern配置及原理剖析

    这篇文章主要介绍了SpringMVC的url-pattern配置及原理剖析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-06-06
  • 大厂面试常考:快速排序冒泡排序算法

    大厂面试常考:快速排序冒泡排序算法

    快速排序由于排序效率在同为O(N*logN)的几种排序方法中效率较高,因此经常被采用,再加上快速排序思想----分治法也确实实用,因此很多软件公司的笔试面试,包括像BAT、字节、美团等知名IT公司都喜欢考查快速排序原理和手写源码
    2021-08-08
  • Spring Boot中使用activiti的方法教程(一)

    Spring Boot中使用activiti的方法教程(一)

    最近一直研究springboot,下面这篇文章主要给大家介绍了关于Spring Boot中使用activiti的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧
    2018-08-08
  • 详解使用SSM实现简单工作流系统之实现篇

    详解使用SSM实现简单工作流系统之实现篇

    这篇文章主要介绍了使用SSM实现简单工作流系统之实现篇,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-12-12
  • VerifyCodeServlet(一次性验证码)

    VerifyCodeServlet(一次性验证码)

    这篇文章主要介绍了VerifyCodeServlet一次性验证码的使用方法
    2017-05-05
  • RabbitMQ 最常用的三大模式实例解析

    RabbitMQ 最常用的三大模式实例解析

    这篇文章主要介绍了RabbitMQ 最常用的三大模式实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12
  • 23种设计模式(21)java享元模式

    23种设计模式(21)java享元模式

    这篇文章主要为大家详细介绍了23种设计模式之java享元模式,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01
  • Maven访问仓库顺序代码实例解析

    Maven访问仓库顺序代码实例解析

    这篇文章主要介绍了Maven访问仓库顺序实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-08-08

最新评论