西湖区外贸网站建设wordpress网站怎么设置关键词

张小明 2025/12/31 23:45:47
西湖区外贸网站建设,wordpress网站怎么设置关键词,wordpress 短标签,wordpress电影站模版1. 核心思想与工作原理1.1 基本思想归并排序的核心思想是分而治之。它将一个大的排序问题分解为若干小的子问题#xff0c;分别解决这些子问题#xff0c;然后将已排序的子问题合并成最终的有序序列。具体来说#xff0c;归并排序的工作流程可以分为三个主要步骤…1. 核心思想与工作原理1.1 基本思想归并排序的核心思想是分而治之。它将一个大的排序问题分解为若干小的子问题分别解决这些子问题然后将已排序的子问题合并成最终的有序序列。具体来说归并排序的工作流程可以分为三个主要步骤分割Divide将待排序的数组递归地分成两半直到每个子数组只包含一个元素一个元素的数组自然是有序的排序Conquer对最小的子数组进行排序实际上单个元素不需要排序合并Merge将两个已排序的子数组合并成一个更大的有序数组1.2 算法执行过程通过一个具体例子来理解归并排序的过程假设有未排序数组{6, 202, 100, 301, 38, 8, 1}第一次分割与合并分割{6, 202, 100, 301} 和 {38, 8, 1}继续分割左半部分{6, 202} 和 {100, 301}继续分割右半部分{38, 8} 和 {1}合并最小单元{6, 202} → {6, 202}已有序合并{100, 301} → {100, 301}合并{38, 8} → {8, 38}合并{1} → {1}第二次合并合并左半部分{6, 202} 和 {100, 301} → {6, 100, 202, 301}合并右半部分{8, 38} 和 {1} → {1, 8, 38}第三次合并合并最终结果{6, 100, 202, 301} 和 {1, 8, 38} → {1, 6, 8, 38, 100, 202, 301}整个过程中比较次数为3 4 4 11次。2. Java实现2.1 基础递归实现public class MergeSort { /** * 归并排序的主方法 * param arr 待排序的数组 */ public static void mergeSort(int[] arr) { if (arr null || arr.length 1) { return; } // 创建临时数组用于存储合并过程中的中间结果 int[] temp new int[arr.length]; mergeSortHelper(arr, 0, arr.length - 1, temp); } /** * 递归辅助方法 * param arr 待排序数组 * param left 左边界索引 * param right 右边界索引 * param temp 临时数组 */ private static void mergeSortHelper(int[] arr, int left, int right, int[] temp) { // 递归终止条件当子数组只有一个元素时 if (left right) { int mid left (right - left) / 2; // 计算中间位置避免溢出 // 递归排序左半部分 mergeSortHelper(arr, left, mid, temp); // 递归排序右半部分 mergeSortHelper(arr, mid 1, right, temp); // 合并两个已排序的子数组 merge(arr, left, mid, right, temp); } } /** * 合并两个有序子数组 * param arr 原数组 * param left 左子数组起始索引 * param mid 中间索引左子数组结束右子数组开始 * param right 右子数组结束索引 * param temp 临时数组 */ private static void merge(int[] arr, int left, int mid, int right, int[] temp) { 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 p left; p right; p) { arr[p] temp[p]; } } /** * 测试方法 */ public static void main(String[] args) { int[] arr {64, 34, 25, 12, 22, 11, 90}; System.out.println(排序前的数组); printArray(arr); mergeSort(arr); System.out.println(排序后的数组); printArray(arr); } public static void printArray(int[] arr) { for (int i : arr) { System.out.print(i ); } System.out.println(); } }2.2 小数组使用插入排序对于小规模数组插入排序可能比归并排序更快。可以在递归到一定深度时切换到插入排序private static void mergeSortHelper(int[] arr, int left, int right, int[] temp) { // 当子数组长度小于等于10时使用插入排序 if (right - left 10) { insertionSort(arr, left, right); return; } if (left right) { int mid left (right - left) / 2; mergeSortHelper(arr, left, mid, temp); mergeSortHelper(arr, mid 1, right, temp); merge(arr, left, mid, right, temp); } } /** * 插入排序用于小规模数组 */ private static void insertionSort(int[] arr, int left, int right) { for (int i left 1; i right; i) { int key arr[i]; int j i - 1; while (j left arr[j] key) { arr[j 1] arr[j]; j--; } arr[j 1] key; } }2.3 降序排序实现如果需要实现降序排序只需修改合并过程中的比较条件private static void mergeDescending(int[] arr, int left, int mid, int right, int[] temp) { 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 p left; p right; p) { arr[p] temp[p]; } }3. 性能分析3.1 时间复杂度归并排序的时间复杂度在所有情况下都是O(n log n)最坏情况O(n log n)平均情况O(n log n)最好情况O(n log n)这种稳定的时间复杂度使得归并排序在处理大规模数据时表现优异。递归关系可以表示为T(n) 2T(n/2) O(n)通过主定理求解得到O(n log n)。3.2 空间复杂度归并排序需要额外的O(n)空间来存储临时数组。这是因为在合并过程中需要创建一个与原数组同样大小的辅助数组。这使得归并排序是非原地排序算法。3.3 稳定性归并排序是一种稳定的排序算法。这意味着如果两个元素的值相等它们在排序后的相对顺序保持不变。这一特性在某些应用场景中非常重要比如当需要按多个关键字排序时。4. 归并排序的优缺点4.1 优点时间复杂度稳定无论输入数据如何时间复杂度都是O(n log n)性能可预测稳定性好保持相等元素的相对顺序适用于需要稳定排序的场景适合外部排序当数据量太大无法全部加载到内存时归并排序是理想选择适合链表排序归并排序天然适合链表数据结构不需要随机访问4.2 缺点需要额外空间需要O(n)的额外存储空间对小规模数据效率不高当数据规模较小时常数因子较大可能不如插入排序等简单算法递归调用开销递归实现需要额外的函数调用开销
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

豆瓣网站模板郑州市网站建设哪家公司好

在Arch Linux环境中为llama.cpp配置SYCL后端,就像解开一道技术谜题——需要绕过Intel oneAPI工具链与滚动发行版的兼容性陷阱,最终实现Intel GPU的极致加速。本指南将带领你完成从故障诊断到性能调优的全流程,让搭载Arc显卡的机器释放LLM推理…

张小明 2025/12/30 22:43:28 网站建设

南通市建设监理协会网站网站免费域名申请

Flutter富文本性能优化实战:解决长文本渲染卡顿与内存泄漏问题 【免费下载链接】engine The Flutter engine 项目地址: https://gitcode.com/gh_mirrors/eng/engine "为什么我的Flutter应用在显示长文章时越来越卡?"这是很多开发者遇到…

张小明 2025/12/30 22:50:05 网站建设

做公司网站的企业郑州企业管理咨询有限公司

金融业务系统文档导入功能开发纪实 一、需求背景与痛点 作为金融行业前端开发人员,在2025年第二季度接到紧急需求:需为现有业务系统新增Word/PDF文档导入功能,重点要求完整保留文档中的图文混排样式及公式内容。当前系统架构为Vue2-CLI前端…

张小明 2025/12/30 22:44:38 网站建设

制作宣传网站有哪些网站建设横幅

日,以“智跃无界,开源致远”为主题的操作系统大会2025在北京举办。大会由开放原子开源欧拉(OpenAtom openEuler,简称“开源欧拉”或“openEuler”)社区,协同数十家产业伙伴共同举办,旨在汇聚全球…

张小明 2025/12/30 22:53:35 网站建设

流感用什么药更好宁波seo企业推广

写在前面 用了半年ChatGPT,你可能还在犯这样的错误: 在同一个对话里既问编程问题又问历史知识,结果AI越答越乱用"不要啰嗦"这种否定表述,反而得到冗长的回答把AI当百科全书,结果它一本正经地胡说八道 别担心,今天这篇文章就是要帮你彻底告别这些坑。 我整理了10个经过…

张小明 2025/12/30 22:46:28 网站建设

网站上的按钮怎么做wordpress给分类添加自定义栏目

jQuery EasyUI 数据网格 - 转换 HTML 表格为数据网格&#xff08;DataGrid&#xff09; jQuery EasyUI 的 datagrid 组件最强大的功能之一就是可以直接将现有的 HTML <table> 表格转换为功能丰富的 DataGrid&#xff0c;而无需重新定义列或数据源。这非常适合快速升级传…

张小明 2025/12/30 23:12:04 网站建设