算法是否以相同的时间一致性对整数和字符串进行排序?

时间:2013-05-18 02:41:23

标签: sorting

我知道这可能是一个愚蠢的问题,但假设算法在5秒内排序100,000个整数。同样的算法是否会在5秒内对100,000个字符串进行排序,或者它们的排序时间会不同?

5 个答案:

答案 0 :(得分:2)

比较字符串比比较整数更昂贵。整数比较是通常在CPU中发生的操作。另一方面,字符串的比较需要在软件中实现。因此,字符串的比较可以采取与字符串中的字符一样多的操作。

- DMG

答案 1 :(得分:1)

问:算法是否以相同的时间一致性对整数和字符串进行排序?

答:如果你的意思是"asymptotic"/"Big O notation":是的。字符串显然需要更长时间......但按比例更长。

答案 2 :(得分:0)

简单的答案是否定的。通常,排序字符串比排序整数要长得多。

考虑排序"纸张"和"爸爸" - 你需要找到" paper"大于" papa"通过比较前4个字符。对于较大的字符串,尤其是短语,这可能会更长。

相反,整数比较将采用单个指令。

要进行排序,需要反复进行这些比较;因此排序字符串几乎总是需要更长的时间。

答案 3 :(得分:0)

字符串将花费更多时间。整数被比较为一组按位运算。当涉及到字符串时,每个字节或字符将与整数所需的相等操作进行比较。

实际上,排序一组字符串将涉及比较所有字符串中的字符总数,在最坏的情况下。最糟糕的情况是所有字符串都是相同的。必须遍历每个字符串直到结束以确保它是相等的(strcmp()比较这种方式)

答案 4 :(得分:0)

假设您按字典顺序对它们进行排序,并快速排序。你编写自己的比较函数来比较你的字符串和整数。

整数比较简单,它的值是索引,而字符串,你需要通过它的内容进行比较。我们知道快速排序以平均时间复杂度O(nlogn)运行,最差为O(n ^ 2),并且当选择的枢轴是当前分区的最小值或最大值时发生。我们假设一切顺利,我们现在得到了平均情况。

时间复杂度的变量是你的比较函数,整数1是非常快的O(1),而比较字符串则归结为O(min(len(a),len(b))的最坏情况,最好的情况O(1),当第一个字符不同时。

所以是的,它的速度较慢,但​​考虑到它们是字符串并不是那么糟糕,最糟糕的情况是那些很少发生的情况。 (就像Barney Goven所说,比较两个相似的字符串。)

当谈到算法的时间复杂性时,我们通常会谈论数据集变大时的增长。就像paulsm4所说的那样,它的比例要长一些。