项目案例 化妆品网站乐山旅游英文网站建设

张小明 2026/1/5 11:17:41
项目案例 化妆品网站,乐山旅游英文网站建设,北京公司摇号,设计感超强的公司名字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进行投诉反馈,一经查实,立即删除!

网站建设比较好的网站服务器怎么打开

在亚马逊这个日益成熟的市场,品牌推广已经不再是简单的广告投放或促销打折,而是一场需要精密设计、系统执行的“全链路工程”,成功的品牌不再依赖单点突破,而是致力于构建一个从精准定位、多维触达、高效转化到持续优化的增长飞轮…

张小明 2026/1/4 19:38:33 网站建设

wordpress $pagenow南沙seo培训

Qt 开发中的第三方工具、容器、类型与宏 1. 第三方工具介绍 在 Qt 生态系统中,有许多优秀的第三方工具可供开发者使用。这些工具丰富了 Qt 的功能,为开发工作带来了更多的便利。 1.1 Qwt 类别 :Widgets and classes 网站 :http://qwt.sf.net 许可证 :Qwt License…

张小明 2026/1/4 19:46:46 网站建设

网站制作模板软件公司办网站大概多少钱

FLUX.1 schnell作为一款革命性的AI绘图工具,将文本转图像的技术推向了新的高度。这款拥有120亿参数的修正流变换器,通过潜在对抗扩散蒸馏训练,能够在1到4步内生成高质量图像,为创作者提供了前所未有的创作效率。 【免费下载链接】…

张小明 2026/1/4 19:48:15 网站建设

网站开发长春网页制作素材服装类

Windows Vista侧边栏小工具:使用与开发指南 1. Windows侧边栏简介 2007年初,微软发布了Windows Vista操作系统,它带来了诸多新特性和改进,其中增强的安全性和可靠性尤为显著。此外,在用户与操作系统的交互方式以及信息管理方面也有很大的改变。Vista的两个重要新特性——…

张小明 2026/1/4 19:57:17 网站建设

衡水网站建设服务商微信精准推广

BLIP图像描述生成:PyTorch-CUDA-v2.7应用场景拓展 在智能内容创作需求激增的今天,如何让机器“看懂”一张图片并用自然语言准确表达其内容,已成为多模态AI落地的关键挑战。比如电商平台每天上传数百万商品图,若全靠人工撰写标题和…

张小明 2026/1/4 19:13:02 网站建设

国外网站内容去哪些平台做微慕WordPress小程序

Dify镜像与Docker Compose的一键启动配置 在AI应用从实验室走向生产线的今天,一个常见的痛点浮出水面:如何让大语言模型(LLM)平台既强大又易用?开发者希望快速验证想法,企业需要稳定可复用的部署方案。而在…

张小明 2026/1/3 19:20:42 网站建设