码迷,mamicode.com
首页 > 编程语言 > 详细

perl快速获得数字在数组中的排序

时间:2016-05-18 17:42:13      阅读:260      评论:0      收藏:0      [点我收藏+]

标签:

某些情况下,有一个已经排好序的数组,如果要获得一个数字在这个数组中的顺序,用遍历的方法会比较慢,如下是一个快速获取位置的函数,会返回:在这个数组中,有多少个值比给定的值要小。

#! /usr/bin/env perl
use strict;
use warnings;

my @array=(1,2,2,3,4,5,6,7,8,9,10);
my $value=shift;
@array=sort{$a<=>$b} @array;

my $percent=&findLess($value,@array);
print "$percent\n";

sub findLess{
    my ($value,@array)=@_;
    my $result=-1;
    my $array_length=@array;
    my $left=0;
    my $right=$array_length-1;
    while(1){
        if($value<=$array[$left]){
            $result=$left;
        }
        elsif($value>$array[$right]){
            $result=$right+1;
        }
        elsif($right-$left<=1){
            if($value>$array[$left]){
                $result=$left+1;
            }
            else{
                $result=$left;
            }
        }
        else{
            my $mid=int(($left+$right)/2);
            # print "mid\t$mid\n";
            if($value<=$array[$mid]){
                $right=$mid;
            }
            else{
                $left=$mid;
            }
            # print "$left\t$right\n";
        }
        last if($result>=0);
    }
    # print "$result\n";
    my $percent=($result)/$array_length;
    return($percent);
}

 

perl快速获得数字在数组中的排序

标签:

原文地址:http://www.cnblogs.com/yumtaoist/p/5505750.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!