404 Blog Not Found:javascript - Array#sort������quicksort����٤�!?�Ϥ���äȤ����ä��Ǥ������¤ϥǡ����μ��व������Ǥ���С�builtin sort��Ф�ȴ�����Ȥ�JavaScript�Ǥʤ��Ƥ⤽��ۤ��񤷤�����ޤ���

�㤨�С������Ȥ������оݤ�̩�����������ͤǡ����꡼���դ����ˤ�����ˤϡ�bucket sort������ޤ��������Ȥ��С�Perl�ˤ����Ƥ���built-in���ñ�˽Ф�ȴ���ޤ���

% perl bucket.pl 10000
Benchmark: running bucket, builtin, quick for at least 3 CPU seconds...
    bucket:  3 wallclock secs ( 3.06 usr +  0.03 sys =  3.09 CPU) @ 40.13/s (n=124)
   builtin:  3 wallclock secs ( 3.17 usr +  0.03 sys =  3.20 CPU) @ 30.63/s (n=98)
     quick:  3 wallclock secs ( 3.16 usr +  0.01 sys =  3.17 CPU) @  4.10/s (n=13)
          Rate   quick builtin  bucket
quick   4.10/s      --    -87%    -90%
builtin 30.6/s    647%      --    -24%
bucket  40.1/s    879%     31%      --

�������JavaScript�Ǥ⡣

# of Items:

����bucket sort�����르�ꥺ��Ū�ˤ��ñ�Ǥ���

  1. Ŭ����������Ѱդ��롣���줬�Х���(bucket)��������
  2. �������󤫤���ͤ�緫��˼��Ф������ο������ܤΥХ��Ĥˤ��ο��ͤ򤿤��������
  3. ���ΥХ��Ĥ�������С�������

�ʲ����ºݤΥ�������

JavaScript
    var bsort = function(ary, cmp){
        var bucket = [];
        for (var i = 0, l = ary.length; i < l; i++){
            bucket[ary[i]] = ary[i];
        }
        var j = 0;
        for (var i = 0, l = bucket.length; i < l; i++){
            if (bucket[i] == undefined) continue;
            ary[j++] = bucket[i];
        }
        return ary;
    };
Perl
sub bucket_sort(\@&){
    my ($aref, $cref) = @_;
    my @bucket = ();
    $bucket[$_] = $_ for (@$aref);
    my $i = 0;
    defined $_ and $aref->[$i++] = $_ for (@bucket);
    return $aref;
}

����Ǥϡ��ʤ�builtin�ǤϤ��줬�Ȥ��ʤ����Ȥ����С����������ʤ�����Ǥ����������Τ����Τϡ����������ӥ�����(comparison sort)�ǡ�����Ǥ���н�����֤��ؿ����Ϥ���С��ɤ������Ǥ������������ȤǤ��ޤ�����in-place(����������¤��ؤ���)�Ǥ���С����꡼��Ǿ��¤ǺѤߤޤ����������ꡢO(n log(n))��Ķ�����ʤ��ɤ�¸�ߤ���Ȥ����櫓�Ǥ���

���ȡ��嵭�μ����ξ��Ǥ�������ʣ�������������NG�Ǥ�(��������)��

������Ф���bucket sort�Ǥϡ��㤨�С�(1,4,9...100��)�Τ褦�ʡ��������ޤФ������ˤϻȤ��Ť餤�Ȥ����Τ�狼��ޤ���

���르�ꥺ�������ϡ��ǡ������̣������ǡ��Ȥ������äǤ�����

Dan the Unsorted Man

�ɵ�:

odz buffer - Bucket Sort & Distribution Counting Sort
��������ʣ�ͤ���������Ǥ��ü������㤦�������ˤϤ��������Τ� bucket sort �����ɡ���ʣ������ʤ��Ȥ��ʤꥢ�ץꥱ������󤬸��ꤵ���褦�ʡ��Ƥ����ǧ�����Ƥ��������Ƥʤ������ʤ���������ɡ�

���ä����Ȥ���Ǥ����Ȥ����櫓�Ǥ��λݤ��ɵ����Ƥ����ޤ�������ʣ����OK�Ǥ�odz����ξ嵭entry�򻲾ȤΤ��ȡ�

����ʬ�ۿ��������Ȥˤ��ơ���ʣ��¿��������ä��顢���򤤤��Ȥ��狼��ޤ�����JS��quick sort���䤿���٤��ʤ�ΤǤ�����ä���entry�μ����Ϥ��Τޤޤˤ��Ƥ����ޤ������������ʬ�ۿ��������Ȥμ�����ʲ��ˡ�

var dc_sort = function(ary, cmp){
    var bucket = [];
    for (var i = 0, l = ary.length; i < l; i++){
        if (! bucket[ary[i]]) bucket[ary[i]] = 0;
        bucket[ary[i]] += 1;
    }
    var j = 0;
    for (var i = 0, l = bucket.length; i < l; i++){
        if (! bucket[i]) continue;
        for (var k = 0; k < bucket[i]; k++) ary[j++] = i;
    }
    return ary;
};
Perl
sub dc_sort(\@&){
    my ($aref, $cref) = @_;
    my @bucket = ();
    $bucket[$_]++ for (@$aref);
    my $j = 0;
    for my $i (0 .. @bucket - 1){
        my $b = $bucket[$i] or next;
        $aref->[$j++] = $i for (1..$b)
    }
    return $aref;
}