Perl高级排序如何使用sort函数中的$ a和$ b值对值进行排序

时间:2016-06-29 11:51:29

标签: perl sorting

@array=sort{$a <=> $b} @input;
@input = qw \  3 4 5 1 6 3 9 \;

所以这里perl如何在内部对值进行排序。

那么通过哪种方式在perl高级排序中对值进行排序,以及使用哪种排序方法对值进行排序以及如何排序?

2 个答案:

答案 0 :(得分:3)

perldoc sort

  

Perl 5.6及更早版本使用快速排序算法来实现排序。该算法不稳定,可能是二次的。 (稳定排序保留了比较相等的元素的输入顺序。虽然快速排序的运行时间是在所有长度为N的数组上平均的O(NlogN),但对于某些输入,时间可以是O(N ** 2),二次行为。)在5.7中,快速排序实现被替换为稳定的mergesort算法,其最坏情况行为是O(NlogN)。

答案 1 :(得分:2)

Perl中的

Sort函数根据Ascii table对值进行排序。

例如:

14,21,3,5

这将给出输出:

2

所以14和21就在那之前3,但是你首先期待3。所以在比较21和3时,它将它们作为字符串进行比较。意味着它正在比较两个字符串的第一个字符,即3<=>,并且在Ascii表中的那个3之前,因此它在3之前放置了21。

默认情况下,Perl不理解您要将它们排序为数字。

因此,为了解决这个问题,我们使用比较运算符$a,将这些数组元素作为数字进行比较。

要按升序和降序对它们进行排序,我们使用$b{$a <=> $b}。当您编写代码块$a时,它告诉Perl对于输入中的每对元素,将它们传递给$b-1,并进行比较并返回:

    如果$a小于$b ,则
  • 1 如果$a大于$b
  • ,则
  • 0 如果$a等于$b
  • ,则
  • <select id="selectbox" name="mfi_4_a_i"> <option value="1">Yes</option> <option value="0">No</option> </select> <input type="text" id="sdd" disabled="true" />