在内存使用方面有效的排序算法?

时间:2013-07-06 02:53:40

标签: sorting assembly mips

所以对于一个项目我正在工作其中一个部分需要排序。这些都是用MIPS汇编语言完成的。目前我在使用插入或冒泡排序之间进行辩论。我知道这两个比Merge和Quick排序慢,但我试图得到这是最少数量的静态/动态指令。在这种情况下哪一个会更有效率?我觉得在速度和内存使用之间始终存在权衡。真的吗?

2 个答案:

答案 0 :(得分:3)

它在很大程度上取决于您要排序的数组的大小。对于大型数组,简单的排序算法,因为冒泡排序往往非常慢。

大多数人都不知道,由于代码大小较小,对于足够小的数组,冒泡排序甚至比快速排序(以及其他“快速”排序)更快。

所以:

  1. 如果您的数组是可变大小而且最大大小(如果相当大) - 使用快速排序(或类似) - 或者稍后您应该解释汇编程序如何如此慢。 :)

  2. 如果阵列足够小(可能高达数百个元素),请使用冒泡排序,您将同时拥有 - 小代码和高性能。

  3. 根据我的经验,数组排序不是那么常见的操作。你真的,非常确定,你需要对这些数组进行排序吗?

答案 1 :(得分:0)

我对插入排序的回忆是你一次收到一个新记录,所以如果你已经有数据要排序,你需要两倍的数据 - 一个要读,一个要写。对于任何非平凡的数据集,这可能比排序算法花费更多的内存。冒泡排序可以就地完成(即如果你已经有一个数据块要排序,它只需要足够的额外内存来存储一条记录,甚至一个字节,具体取决于数据。

冒泡排序也需要更少的代码来编写。

至于速度和内存之间总是存在权衡(或者实际上,任何两种资源),情况并非总是如此。但是,如果方法A更快更简单,并且使用的内存少于方法B,那么B实际上并没有出现争用。