zoukankan      html  css  js  c++  java
  • perl快速获得数字在数组中的排序

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

    #! /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
    ";
    
    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	$mid
    ";
                if($value<=$array[$mid]){
                    $right=$mid;
                }
                else{
                    $left=$mid;
                }
                # print "$left	$right
    ";
            }
            last if($result>=0);
        }
        # print "$result
    ";
        my $percent=($result)/$array_length;
        return($percent);
    }
  • 相关阅读:
    放缩ImageView
    2017/5/3 afternoon
    2017/5/3 morning
    2017/5/2 afternoon
    2017/5/2 morning
    2017/4/28 afternoon
    2017/4/28 morning
    2017/4/27 afternoon
    2017/4/27 morning
    2017/4/26 afternoon
  • 原文地址:https://www.cnblogs.com/yumtaoist/p/5505750.html
Copyright © 2011-2022 走看看