You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

按高度排序矩形数组的两种方案:效率、可读性及适用场景咨询

矩形数组按高度排序:两种方案的对比与选择

效率对比

  • 方案1(单独存储高度数组):需要先遍历原数组提取高度(还得额外记录原索引才能对应回矩形),排序后再映射回原矩形数组。整体多了O(n)的预处理和映射开销,排序本身的时间复杂度和方案2一致,但总耗时更高,还会额外占用O(n)的内存存储高度+索引数组。如果最终目标是得到排序后的矩形数组,这个方案完全是多此一举。
  • 方案2(直接按高度字段排序):直接对原矩形数组排序,比较时仅读取高度字段即可。不需要额外数组存储,也没有多余的遍历步骤,时间复杂度就是排序算法本身的O(n log n),空间复杂度更低(比如原地排序的快速排序仅需O(log n)栈空间),效率碾压方案1。

可读性对比

  • 方案1:逻辑拆分得零散,从提取高度、排序到映射回矩形,需要读者理解“高度数组和原矩形数组的索引对应关系”,代码冗余且容易出现索引匹配错误,可读性差。
  • 方案2:代码意图直接明了,比如用Python的sort(key=...)、Java的Comparator.comparing(Rectangle::getHeight),一眼就能看出是按高度对矩形数组排序,简洁易懂,维护成本低。

场景选择

选方案1的情况

  • 你只需要高度的排序结果,不需要保留矩形的其他属性;
  • 遇到某些老旧/特殊的排序算法,只能处理纯数值数组(这种场景现在极少,主流语言的排序API都支持自定义比较规则)。

选方案2的情况

  • 最终需要的是排序后的完整矩形数组(这是绝大多数业务场景的需求);
  • 希望代码简洁、易维护,减少中间变量带来的出错风险;
  • 追求更高的执行效率,避免不必要的内存开销和遍历操作。

代码示例(Python)

方案1实现

rectangles = [{"height": 5, "width": 3}, {"height": 2, "width": 4}, {"height": 7, "width": 1}]
# 提取高度并绑定原索引
height_index_pairs = [(r["height"], idx) for idx, r in enumerate(rectangles)]
height_index_pairs.sort()
# 映射回原矩形数组
sorted_rectangles = [rectangles[idx] for _, idx in height_index_pairs]

方案2实现

rectangles = [{"height": 5, "width": 3}, {"height": 2, "width": 4}, {"height": 7, "width": 1}]
# 直接按height字段排序
rectangles.sort(key=lambda x: x["height"])

内容的提问来源于stack exchange,提问作者TRoUkI

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 23:47:54