当前位置: 首页 > news >正文

算法-归并排序-JAVA

下面是Java实现归并排序的示例代码:

public class MergeSort {public void mergeSort(int[] arr) {if (arr == null || arr.length <= 1) {return;}int[] temp = new int[arr.length];mergeSort(arr, temp, 0, arr.length - 1);}private void mergeSort(int[] arr, int[] temp, int left, int right) {if (left >= right) {return;}int mid = left + (right - left) / 2;mergeSort(arr, temp, left, mid);mergeSort(arr, temp, mid + 1, right);merge(arr, temp, left, mid, right);}private void merge(int[] arr, int[] temp, int left, int mid, int right) {int i = left;int j = mid + 1;int k = left;while (i <= mid && j <= right) {if (arr[i] <= arr[j]) {temp[k++] = arr[i++];} else {temp[k++] = arr[j++];}}while (i <= mid) {temp[k++] = arr[i++];}while (j <= right) {temp[k++] = arr[j++];}for (int index = left; index <= right; index++) {arr[index] = temp[index];}}
}

在归并排序中,首先进行递归地将数组划分为更小的子数组,然后进行合并操作。在合并操作中,将两个有序的子数组合并成一个有序的数组。

上述代码实现了归并排序的主要逻辑。mergeSort方法用于调用归并排序的入口,它接受待排序的数组作为参数,并创建一个额外的临时数组。mergeSort方法会递归地将数组划分为更小的子数组,然后调用merge方法将两个子数组合并。

merge方法中,使用三个指针ijk分别指向左子数组、右子数组和临时数组的位置。通过比较左指针和右指针指向的元素大小,将较小的值复制到临时数组中,并同时移动指针。最后,将临时数组中的元素复制回原始数组中。

要使用归并排序,只需创建一个MergeSort对象,并调用mergeSort方法,示例如下:

public class Main {public static void main(String[] args) {int[] arr = {6, 3, 8, 5, 2, 7, 1, 4};MergeSort mergeSort = new MergeSort();mergeSort.mergeSort(arr);System.out.println("Sorted array:");for (int num : arr) {System.out.print(num + " ");}}
}

以上代码将输出归并排序后的有序数组:

Sorted array:
1 2 3 4 5 6 7 8

归并排序的时间复杂度为O(nlogn),其中n是待排序数组的大小。该算法是一种稳定的排序算法,适用于各种数据类型和数据量的排序。

http://www.lryc.cn/news/97938.html

相关文章:

  • Flask 进阶
  • home-assistant整合sso
  • Ip-Limit: 轻量级注解式IP限流组件(二)
  • 【C++】开源:Redis数据库配置与使用
  • TCP/IP网络编程 第二十四章:制作HTTP服务器端
  • React 前端应用中快速实践 OpenTelemetry 云原生可观测性(SigNoz/K8S)
  • Linux 多线程并发Socket服务端的实现( 11 ) -【Linux通信架构系列 】
  • 2.7. Java 泛型了解么?什么是类型擦除?介绍一下常用的通配符?
  • 单例模式与构造器模式
  • SQL力扣练习(七)
  • C语言假期作业 DAY 05
  • php-golang-rpc使用roadrunner-server/goridge/v3/pkg/rpc和php的spiral/goridge3.2实践
  • API常用签名验证方法(PHP实现)
  • kotlin高阶函数
  • kotlin list集合树
  • 基于Autoencoder自编码的64QAM星座图整形调制解调通信系统性能matlab仿真
  • 【Spring】Spring 总览
  • 微软、OpenAI用上“数据永动机” 合成数据是晨曦还是暮光?
  • 简单认识Redis 数据库的高可用
  • 超级实用!,掌握这9个鲜为人知的CSS属性
  • 深圳国际新能源及智能网联汽车全产业博览会今年10月举办
  • 【具有非线性反馈的LTI系统识别】针对反馈非线性的LTI系统,提供非线性辨识方案(SimulinkMatlab代码实现)
  • Stable diffusion 和 Midjourney 怎么选?
  • c++网络编程
  • 【沁恒蓝牙mesh】数据收发接口与应用层模型传递
  • Java类关系之代理(代理模式)
  • java: 无法访问redis.clients.jedis.JedisPoolConfig
  • 基于java中学教务管理系统设计与实现
  • vscode设置java -Xmx最大堆内存
  • 组件开发系列--Apache Commons Chain