热门标签 | HotTags
当前位置:  开发笔记 > 人工智能 > 正文

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

这篇文章主要介绍了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[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 

选择排序

选择排序原理图

选择排序代码

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

二分查找法

二分查找法原理

二分法的代码实现:

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] 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程序设计有所帮助。


推荐阅读
  • 深入解析Android自定义View面试题
    本文探讨了Android Launcher开发中自定义View的重要性,并通过一道经典的面试题,帮助开发者更好地理解自定义View的实现细节。文章不仅涵盖了基础知识,还提供了实际操作建议。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 本文介绍如何利用动态规划算法解决经典的0-1背包问题。通过具体实例和代码实现,详细解释了在给定容量的背包中选择若干物品以最大化总价值的过程。 ... [详细]
  • 本文详细探讨了Java中的24种设计模式及其应用,并介绍了七大面向对象设计原则。通过创建型、结构型和行为型模式的分类,帮助开发者更好地理解和应用这些模式,提升代码质量和可维护性。 ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • 题目描述:给定n个半开区间[a, b),要求使用两个互不重叠的记录器,求最多可以记录多少个区间。解决方案采用贪心算法,通过排序和遍历实现最优解。 ... [详细]
  • 深入理解C++中的KMP算法:高效字符串匹配的利器
    本文详细介绍C++中实现KMP算法的方法,探讨其在字符串匹配问题上的优势。通过对比暴力匹配(BF)算法,展示KMP算法如何利用前缀表优化匹配过程,显著提升效率。 ... [详细]
  • 探讨一个显示数字的故障计算器,它支持两种操作:将当前数字乘以2或减去1。本文将详细介绍如何用最少的操作次数将初始值X转换为目标值Y。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 本文探讨如何设计一个安全的加密和验证算法,确保生成的密码具有高随机性和低重复率,并提供相应的验证机制。 ... [详细]
  • 深入解析:手把手教你构建决策树算法
    本文详细介绍了机器学习中广泛应用的决策树算法,通过天气数据集的实例演示了ID3和CART算法的手动推导过程。文章长度约2000字,建议阅读时间5分钟。 ... [详细]
  • 在金融和会计领域,准确无误地填写票据和结算凭证至关重要。这些文件不仅是支付结算和现金收付的重要依据,还直接关系到交易的安全性和准确性。本文介绍了一种使用C语言实现小写金额转换为大写金额的方法,确保数据的标准化和规范化。 ... [详细]
  • 在给定的数组中,除了一个数字外,其他所有数字都是相同的。任务是找到这个唯一的不同数字。例如,findUniq([1, 1, 1, 2, 1, 1]) 返回 2,findUniq([0, 0, 0.55, 0, 0]) 返回 0.55。 ... [详细]
  • 本文探讨了卷积神经网络(CNN)中感受野的概念及其与锚框(anchor box)的关系。感受野定义了特征图上每个像素点对应的输入图像区域大小,而锚框则是在每个像素中心生成的多个不同尺寸和宽高比的边界框。两者在目标检测任务中起到关键作用。 ... [详细]
  • 网络攻防实战:从HTTP到HTTPS的演变
    本文通过一系列日记记录了从发现漏洞到逐步加强安全措施的过程,探讨了如何应对网络攻击并最终实现全面的安全防护。 ... [详细]
author-avatar
wzy523
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有