首页 > 基础资料 博客日记
【LeetCode: 912. 排序数组 + 归并排序】
2025-01-13 15:30:14基础资料围观95次
文章【LeetCode: 912. 排序数组 + 归并排序】分享给大家,欢迎收藏Java资料网,专注分享技术知识
🚀 算法题 🚀 |
🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀
🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨
🌲 作者简介:硕风和炜,CSDN-Java领域优质创作者🏆,保研|国家奖学金|高中学习JAVA|大学完善JAVA开发技术栈|面试刷题|面经八股文|经验分享|好用的网站工具分享💎💎💎
🌲 恭喜你发现一枚宝藏博主,赶快收入囊中吧🌻
🌲 人生如棋,我愿为卒,行动虽慢,可谁曾见我后退一步?🎯🎯
🚀 算法题 🚀 |
🚩 题目链接
⛲ 题目描述
给你一个整数数组 nums,请你将该数组升序排列。
你必须在 不使用任何内置函数 的情况下解决问题,时间复杂度为 O(nlog(n)),并且空间复杂度尽可能小。
示例 1:
输入:nums = [5,2,3,1]
输出:[1,2,3,5]
示例 2:
输入:nums = [5,1,1,2,0,0]
输出:[0,0,1,1,2,5]
提示:
1 <= nums.length <= 5 * 104
-5 * 104 <= nums[i] <= 5 * 104
🌟 求解思路&实现代码&运行结果
⚡ 归并排序
🥦 求解思路
- sortArray(int[] arr): 这是归并排序的入口函数,它检查数组是否为空,如果是则直接返回。否则,创建一个临时数组并调用递归排序函数。
- mergeSort(int[] arr, int left, int right, int[] temp): 这是递归排序函数,它将数组分成两半,分别对左半部分和右半部分进行排序,然后调用merge函数将两个有序部分合并。
- merge(int[] arr, int left, int mid, int right, int[] temp): 这是合并函数,它将两个有序数组合并成一个有序数组,并将结果存回原数组。
- 有了基本的思路,接下来我们就来通过代码来实现一下。
🥦 实现代码
class Solution {
public int[] sortArray(int[] arr) {
if (arr == null || arr.length < 1) {
return new int[]{}; // 如果数组为空或只有一个元素,直接返回
}
int[] temp = new int[arr.length]; // 创建一个临时数组用于合并
mergeSort(arr, 0, arr.length - 1, temp);
return arr;
}
// 递归排序函数
private static void mergeSort(int[] arr, int left, int right, int[] temp) {
if (left < right) {
int mid = left + (right - left) / 2; // 找到中间点
mergeSort(arr, left, mid, temp); // 对左半部分进行排序
mergeSort(arr, mid + 1, right, temp); // 对右半部分进行排序
merge(arr, left, mid, right, temp); // 合并两个有序部分
}
}
// 合并两个有序数组
private static void merge(int[] arr, int left, int mid, int right, int[] temp) {
int i = left; // 左半部分的起始索引
int j = mid + 1; // 右半部分的起始索引
int k = 0; // 临时数组的起始索引
// 将两个有序数组合并到临时数组中
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++];
}
// 将临时数组中的元素复制回原数组
k = 0;
while (left <= right) {
arr[left++] = temp[k++];
}
}
}
🥦 运行结果
💬 共勉
最后,我想和大家分享一句一直激励我的座右铭,希望可以与大家共勉! |
文章来源:https://blog.csdn.net/Coder_ljw/article/details/145051052
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!
标签: