按高度排序矩形数组的两种方案:效率、可读性及适用场景咨询
矩形数组按高度排序:两种方案的对比与选择
效率对比
- 方案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
相关产品推荐
相关产品推荐

