IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> 归并排序 + java + 数据结构 + 小和逆序对问题 -> 正文阅读

[游戏开发]归并排序 + java + 数据结构 + 小和逆序对问题

归并排序

整体就是一个简单递归,左边排好序、右边排好序、让其整体有序

代码

package test3;

public class Test {
  public static void main(String[] args) {

    int[] arr= {3,2,1,5,6,2};
    mergeSort(arr);

    for (int i: arr){
      System.out.printf("%d ", i);
    }
  }

  public static void mergeSort(int[] arr) {
    if (arr == null || arr.length < 2) {
      return;
    }
    process(arr, 0, arr.length - 1);
  }

  public static void process(int[] arr, int L, int R) {
    if (L == R) {
      return;
    }
    int mid = L + ((R - L) >> 1); // 求中点
    process(arr, L, mid);
    process(arr, mid + 1, R);
    merge(arr, L ,mid ,R);
  }

  public static void merge(int[] arr, int L, int M, int R){
    int[] help = new int[R - L + 1];
    int i = 0;
    int p1 = L;
    int p2 = M + 1;

    //移动p1/p2,谁小,将其填充到 help数组中,直到其中一个发生越界
    while (p1 <= M && p2 <= R){
      help[i++] = arr[p1] <= arr[p2] ? arr[p1++] : arr[p2 ++];
    }

    //p1未越界
    while (p1 <= M){
      help[i++] = arr[p1++];
    }
    //p2未越界
    while (p2 <= R){
      help[i++] = arr[p2++];
    }

    //将help中内容 拷贝会 原来arr中
    for (i = 0; i < help.length; i++){
      arr[L + i] = help[i];
    }
  }
}

思路

首先是理解 归并的上半部分 拆解

  public static void process(int[] arr, int L, int R) {
    if (L == R) {
      return;
    }
    int mid = L + ((R - L) >> 1); // 求中点
    process(arr, L, mid);
    process(arr, mid + 1, R);

拆分数组

紫色是执行顺序

在这里插入图片描述

merge合并数组

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

时间复杂度在这里插入图片描述

提升点

相对于 选择排序,冒泡,插入等排序

没有浪费每次比较后的信息,因此缩减了时间复杂度。

但是需要O(N)的空间复杂度。

小和问题

在一个数组中,每一个数左边比当前数小的数累加起来,叫做这个数组
的小和。求一个数组 的小和。
例子:[1,3,4,2,5]1左边比1小的数,没有;3左边比3小的数,1;4左
边比4小的数,1、3;2左边比2小的数,1;5左边比5小的数,1、3、4、
2;所以小和为1+1+3+1+1+3+4+2=16

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2022-04-24 09:46:08  更:2022-04-24 09:46:55 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 -2025/1/16 21:54:22-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码