Java中常见的查找算法与排序算法总结

Java中常见的查找算法与排序算法总结

在Java中,我们经常需要对数据进行查找和排序。这里我们总结了常见的查找算法和排序算法。

查找算法

1. 顺序查找

顺序查找也叫线性查找,它的思想是从数据序列的一端开始,逐个比较数据,直到找到满足条件的数据或者遍历完整个序列。

以下是Java代码示例:

public static int sequenceSearch(int[] arr, int key) {
    for (int i = 0; i < arr.length; i++) {
        if (arr[i] == key) {
            return i;
        }
    }
    return -1;
}

2. 二分查找

二分查找也叫折半查找,它的思想是将有序数据序列分成若干个子序列,每次取中间位置的值与查找关键字进行比较,如果中间的值比查找的值大,则在左边子序列继续查找,否则在右边子序列继续查找,直到找到满足条件的值或者查找失败。

以下是Java代码示例:

public static int binarySearch(int[] arr, int key) {
    int low = 0;
    int high = arr.length - 1;
    while (low <= high) {
        int mid = (low + high) / 2;
        int midVal = arr[mid];
        if (midVal < key) {
            low = mid + 1;
        } else if (midVal > key) {
            high = mid - 1;
        } else {
            return mid;
        }
    }
    return -1;
}

排序算法

1. 冒泡排序

冒泡排序的思想是将相邻的两个数进行比较,如果顺序不对则进行交换,每次排序都会将最大(小)值移动到最后(前面)的位置。

以下是Java代码示例:

public static void bubbleSort(int[] arr) {
    int temp;
    for (int i = 0; i < arr.length - 1; i++) {
        for (int j = 0; j < arr.length - i - 1; j++) {
            if (arr[j] > arr[j + 1]) {
                temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            }
        }
    }
}

2. 快速排序

快速排序的思想是以一个基准数为标准将数组分成小于和大于基准数两个子序列,对子序列分别进行递归排序,最后合并子序列得到最终结果。

以下是Java代码示例:

public static void quickSort(int[] arr, int left, int right) {
    if (left < right) {
        int partitionIndex = partition(arr, left, right);
        quickSort(arr, left, partitionIndex - 1);
        quickSort(arr, partitionIndex + 1, right);
    }
}

private static int partition(int[] arr, int left, int right) {
    int pivot = left;
    int index = pivot + 1;
    for (int i = index; i <= right; i++) {
        if (arr[i] < arr[pivot]) {
            swap(arr, i, index);
            index++;
        }
    }
    swap(arr, pivot, index - 1);
    return index - 1;
}

private static void swap(int[] arr, int i, int j) {
    int temp = arr[i];
    arr[i] = arr[j];
    arr[j] = temp;
}

以上就是Java中常见的查找算法和排序算法的总结。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java中常见的查找算法与排序算法总结 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • Spring实现IoC的多种方式小结

    下面是针对“Spring实现IoC的多种方式小结”的完整攻略。 什么是IoC IoC全称为Inversion of Control,即控制反转。在传统的程序设计过程中,我们的程序直接依赖与各种类及其实例对象,而这些类与实例则需要通过new操作符来创建。这种程序设计方式称为紧耦合,当实例化对象的方式发生变化时,可能需要修改大量的代码。而IoC则是一种解决方案,…

    Java 2023年6月2日
    00
  • Java中如何将json字符串转换成map/list

    将JSON字符串转换为Map/List是Java编程中非常常见的操作,可以使用第三方库如Jackson、Gson和Fastjson等来实现。以下是使用Jackson和Fastjson两种库实现的示例说明: 使用Jackson库实现 首先,需要在pom.xml中添加Jackson库的依赖: xml <dependency> <groupId&…

    Java 2023年5月26日
    00
  • 详解eclipse下创建第一个spring boot项目

    Eclipse 下创建第一个 Spring Boot 项目的完整攻略 在本文中,我们将详细介绍如何在 Eclipse 下创建第一个 Spring Boot 项目。我们将介绍 Spring Boot 的概念、Eclipse 的配置和使用,并提供两个示例。 Spring Boot 概念 Spring Boot 是一个用于创建独立的、生产级别的 Spring 应用…

    Java 2023年5月15日
    00
  • Java的Hibernate框架中的双向主键关联与双向外键关联

    Java的Hibernate框架提供了双向主键关联和双向外键关联两种关联方式,这两种方式有着各自特点和适合的场景。下面将分别对这两种关联方式进行详细解析,并给出相关示例。 双向主键关联 双向主键关联是指关联关系中两个实体类都具有主键,并且相互之间通过持有对方主键的引用来建立关联。双向主键关联可以通过@MapsId和@ManyToOne注解来实现,在Java中…

    Java 2023年5月19日
    00
  • java微信支付接入流程详解

    Java微信支付接入流程详解 本文将详细介绍Java微信支付接入的流程,帮助开发者在自己的网站中使用微信支付。 1. 注册微信支付商户号 在使用微信支付之前,需要先注册一个微信支付商户号。具体步骤如下: 在微信商户平台(https://pay.weixin.qq.com/index.php/core/home/login?return_url=%2F)注册一…

    Java 2023年5月26日
    00
  • Struts2和Ajax数据交互示例详解

    下面我将详细讲解“Struts2和Ajax数据交互示例详解”的完整攻略,包含以下几个部分: 概述:介绍本文的主要内容和目标。 环境配置:介绍Struts2和Ajax数据交互的环境配置。 示例1:使用Struts2和Ajax实现表单提交,并异步显示提交结果。 示例2:使用Struts2和Ajax实现无刷新分页查询。 1. 概述 本文将介绍如何实现 Struts…

    Java 2023年5月20日
    00
  • Java如何打印完整的堆栈信息

    当Java程序遇到异常时,Java虚拟机会将堆栈信息打印到控制台中。但是,默认情况下,Java只会打印简略的堆栈信息,这对于开发中的调试并不方便。本文将会详细介绍如何打印完整的堆栈信息。 问题描述 通常情况下,Java虚拟机只会打印部分的堆栈信息,例如: Exception in thread "main" java.lang.NullP…

    Java 2023年5月26日
    00
  • Spring的注解简单介绍

    下面是Spring的注解简单介绍攻略。 一、概述 Spring是一个轻量级的开源Java框架,它可以用来构建企业级应用程序。在Spring框架中,注解是一种非常方便的方式,它可以用来代替一部分繁琐的XML配置工作。通过注解,我们可以更加方便地描述应用程序的组成部分,并且更加简洁明了,提高代码可读性。 二、注解简介 在Spring中,常用的注解包括: 1. @…

    Java 2023年6月15日
    00
合作推广
合作推广
分享本页
返回顶部