perl快速获得数字在数组中的排序
Posted 云中道长
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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\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快速获得数字在数组中的排序的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode810. 黑板异或游戏/455. 分发饼干/剑指Offer 53 - I. 在排序数组中查找数字 I/53 - II. 0~n-1中缺失的数字/54. 二叉搜索树的第k大节点(代码片段