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

番禺电子商务网站建设b2b外贸平台

番禺电子商务网站建设,b2b外贸平台,哪个网站可以做图交易平台,网站验收1. 题目链接 LeetCode 912. 排序数组 2. 题目描述 给定一个整数数组 nums,请将其按升序排列。要求: 时间复杂度为 O(n log n)空间复杂度为 O(log n)(递归栈空间)必须原地修改数组,不能使用额外空间 示例&#xff1…
1. 题目链接

LeetCode 912. 排序数组


2. 题目描述

给定一个整数数组 nums,请将其按升序排列。要求:

  • 时间复杂度为 O(n log n)
  • 空间复杂度为 O(log n)(递归栈空间)
  • 必须原地修改数组,不能使用额外空间

示例

  • 输入:nums = [5,2,3,1] → 输出:[1,2,3,5]
  • 输入:nums = [5,1,1,2,0,0] → 输出:[0,0,1,1,2,5]

3. 示例分析
  1. 常规案例
    • 输入:[3,1,4,2] → 三路快排过程:
      • 随机选枢轴(如 2),划分为 [1,2,3,4]
      • 递归处理左右子数组
    • 输出:[1,2,3,4]
  2. 重复元素案例
    • 输入:[2,2,1,1,3] → 三路快排将 12 聚集到中间区,减少递归次数
    • 输出:[1,1,2,2,3]
  3. 边界案例
    • 输入:[] → 输出:[]
    • 输入:[0] → 输出:[0]

4. 算法思路

核心思想三路快速排序 + 随机化策略

  1. 三路划分
    • 将数组分为三部分:小于枢轴、等于枢轴、大于枢轴
    • 对“小于”和“大于”部分递归排序,跳过“等于”部分
  2. 随机化枢轴
    • 随机选择枢轴值,避免最坏时间复杂度(如数组已有序)
  3. 递归终止
    • 子数组长度为 0 或 1 时停止递归

5. 边界条件与注意事项
  1. 空数组处理
    • 直接返回,无需操作
  2. 递归深度优化
    • 虽然理论上空间复杂度为 O(log n),但最坏情况下递归深度为 O(n),需注意栈溢出风险
  3. 随机数生成
    • srand(time(NULL)) 初始化随机种子,但若在极短时间内多次调用函数可能导致种子重复
  4. 重复元素优化
    • 三路划分法在处理重复元素时效率显著优于传统快排

6. 代码实现
class Solution {
public:vector<int> sortArray(vector<int>& nums) {srand(time(NULL));          // 初始化随机种子qsort(nums, 0, nums.size()-1);return nums;}private:// 三路快排核心函数void qsort(vector<int>& nums, int a, int b) {if (a >= b) return;         // 递归终止条件int pivot = getRandomValue(nums, a, b); // 随机选择枢轴值int i = a, left = a-1, right = b+1;     // 三指针初始化// 三路划分过程while (i < right) {if (nums[i] < pivot) {swap(nums[++left], nums[i++]);  // 小于区右扩} else if (nums[i] == pivot) {i++;                            // 等于区不动} else {swap(nums[--right], nums[i]);    // 大于区左扩}}// 递归处理子区间qsort(nums, a, left);       // 处理小于区qsort(nums, right, b);      // 处理大于区}// 随机选择枢轴值int getRandomValue(vector<int>& nums, int a, int b) {int r = rand(); // 生成随机数return nums[a + r % (b - a + 1)]; // 区间内随机选取}
};

在这里插入图片描述


关键代码解析

  1. 三指针初始化

    int i = a, left = a-1, right = b+1;
    
    • i:当前处理指针
    • left:小于区右边界(初始为空)
    • right:大于区左边界(初始为空)
  2. 三路划分过程

    • 元素 < 枢轴:交换到小于区,lefti 右移
    • 元素 == 枢轴:跳过处理,i 右移
    • 元素 > 枢轴:交换到大于区,right 左移
  3. 递归范围确定

    • 最终区间划分:[a, left](小于区)、[left+1, right-1](等于区)、[right, b](大于区)
    • 仅需递归处理小于区和大于区

与其他排序算法对比

算法平均时间复杂度最坏时间复杂度空间复杂度适用场景
三路快排O(n log n)O(n²)O(log n)含重复元素的大数据集
归并排序O(n log n)O(n log n)O(n)需要稳定排序的场景
堆排序O(n log n)O(n log n)O(1)内存受限环境
插入排序O(n²)O(n²)O(1)小规模或基本有序数据

总结

三路快速排序通过随机化枢轴和三分区策略,在保证 O(n log n) 平均时间复杂度的同时,显著提升了对重复元素数据的处理效率。其核心优势体现在:

  1. 原地排序:无需额外空间,满足题目要求
  2. 重复元素优化:将等于枢轴的元素集中处理,减少递归次数
  3. 随机化策略:避免最坏情况时间复杂度

优化建议

  • 当递归深度较大时可切换为插入排序(如子数组长度 < 15)
  • 使用洗牌算法预处理数组,进一步增强随机性

关键点

  • 理解三分区过程与指针移动规则
  • 掌握随机化策略对算法鲁棒性的提升机制

附:三路划分过程示意图

初始数组:[3,1,4,2,5,2,2,6] (随机选择枢轴 2)
划分过程:
1. 小于区收集 1 → [1,3,4,2,5,2,2,6]
2. 等于区跳过 2 → [1,2,4,3,5,2,2,6]
3. 大于区收集 4,5,6 → [1,2,2,2,3,4,5,6]
最终区间:
小于区:[1], 等于区:[2,2,2], 大于区:[3,4,5,6]
http://www.dtcms.com/wzjs/201392.html

相关文章:

  • 企查查企业信息查询网丽水网站seo
  • 合肥 网站建设网站推广名词解释
  • wordpress 4.2.20百度seo排名培训
  • 莲都区建设分局网站长尾词排名优化软件
  • 深圳网站建设咨询公司苏州网站建设制作公司
  • 玉林做网站优化推广河南网站建设哪个公司做得好
  • 揭阳城乡建设局网站怎么做竞价托管
  • 光明新区做网站app推广工作靠谱吗
  • 企业微信功能详细介绍杭州专业seo服务公司
  • 个人网页设计作品展示电脑优化工具
  • 网站关键词基础排名怎么做百度权重划分等级
  • wordpress 找站点如何搜索关键词热度
  • 美做天然居家居网站环球贸易网
  • 做网站用的到java吗网络推广专员是做什么的
  • 创建网站费用seo中国是什么
  • 现在有什么有效的引流方法电脑优化软件排行榜
  • 公司官网网站建设想法windows优化大师收费吗
  • 网站js聊天代码网络宣传的好处
  • 建站平台免代码专业搜索引擎seo服务商
  • 企业建设网站意义永久免费域名申请
  • 大连筑成建设集团有限公司网站百度平台商家客服
  • 秦皇岛做网站公司汉狮价格百度关键词刷排名教程
  • 免费注册企业网站如何做好平台推广
  • 网站集约化建设会议宁波百度seo点击软件
  • 网站html地图怎么做的百度指数是免费的吗
  • 普通网站可以做商城百度云搜索引擎入口手机版
  • wordpress 问答系统杭州seo排名优化
  • 合肥公司门户网站制作应用商店aso
  • 南京浦口做网站点微信公众号营销
  • 云南省网站建设收费调查报告外贸网络推广经验