<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>生信菜鸟团 &#187; 排序</title>
	<atom:link href="http://www.bio-info-trainee.com/tag/%e6%8e%92%e5%ba%8f/feed" rel="self" type="application/rss+xml" />
	<link>http://www.bio-info-trainee.com</link>
	<description>欢迎去论坛biotrainee.com留言参与讨论，或者关注同名微信公众号biotrainee</description>
	<lastBuildDate>Sat, 28 Jun 2025 14:30:13 +0000</lastBuildDate>
	<language>zh-CN</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.1.33</generator>
	<item>
		<title>perl实现二分法查找</title>
		<link>http://www.bio-info-trainee.com/394.html</link>
		<comments>http://www.bio-info-trainee.com/394.html#comments</comments>
		<pubDate>Fri, 20 Mar 2015 02:01:28 +0000</pubDate>
		<dc:creator><![CDATA[ulwvfje]]></dc:creator>
				<category><![CDATA[perl]]></category>
		<category><![CDATA[二分法]]></category>
		<category><![CDATA[排序]]></category>
		<category><![CDATA[查找]]></category>

		<guid isPermaLink="false">http://www.bio-info-trainee.com/?p=394</guid>
		<description><![CDATA[perl实现二分法查找 在perl里面字符串跟数字是不区分的，所以写代码需要考虑 &#8230; <a href="http://www.bio-info-trainee.com/394.html">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<div class="markdown-here-wrapper" data-md-url="http://www.bio-info-trainee.com/wp-admin/post.php?post=394&amp;action=edit">
<h1 id="perl-" style="margin: 1.3em 0px 1em; padding: 0px; font-weight: bold; font-size: 1.6em; border-bottom: 1px solid #dddddd;">perl实现二分法查找</h1>
<blockquote style="margin: 1.2em 0px; border-left: 4px solid #dddddd; padding: 0px 1em; color: #777777; quotes: none;">
<p style="margin: 0px 0px 1.2em !important;">在perl里面字符串跟数字是不区分的，所以写代码需要考虑到它们的区别！</p>
</blockquote>
<h3 id="-" style="margin: 1.3em 0px 1em; padding: 0px; font-weight: bold; font-size: 1.3em;">首先是对数字查找来说，所有的操作符都是 &lt; ,&gt; ,==等等</h3>
<pre style="font-size: 1em; font-family: Consolas, Inconsolata, Courier, monospace; line-height: 1.2em; margin: 1.2em 0px;"><code class="hljs language-perl" style="font-size: 0.85em; font-family: Consolas, Inconsolata, Courier, monospace; margin: 0px 0.15em; padding: 0.5em; white-space: pre; border: 1px solid #cccccc; background-color: #f8f8f8; border-radius: 3px; display: block; overflow: auto; overflow-x: auto; color: #333333; background: #f8f8f8; text-size-adjust: none;"><span class="hljs-variable" style="color: #008080;">@a</span>=<span class="hljs-number" style="color: #008080;">1</span>..<span class="hljs-number" style="color: #008080;">1000</span>;
<span class="hljs-variable" style="color: #008080;">$b</span>=<span class="hljs-number" style="color: #008080;">56</span>; <span class="hljs-comment" style="color: #999988; font-style: italic;">#just a example</span>
<span class="hljs-sub"><span class="hljs-keyword" style="color: #333333; font-weight: bold;">sub</span> half_search{</span>
 <span class="hljs-keyword" style="color: #333333; font-weight: bold;">my</span>(<span class="hljs-variable" style="color: #008080;">$ref</span>,<span class="hljs-variable" style="color: #008080;">$key</span>,<span class="hljs-variable" style="color: #008080;">$low</span>,<span class="hljs-variable" style="color: #008080;">$high</span>)=<span class="hljs-variable" style="color: #008080;">@_</span>;
 <span class="hljs-variable" style="color: #008080;">$high</span>=@{<span class="hljs-variable" style="color: #008080;">$ref</span>}-<span class="hljs-number" style="color: #008080;">1</span> <span class="hljs-keyword" style="color: #333333; font-weight: bold;">unless</span> <span class="hljs-variable" style="color: #008080;">$high</span>;
 <span class="hljs-keyword" style="color: #333333; font-weight: bold;">if</span> (<span class="hljs-variable" style="color: #008080;">$key</span> &lt; <span class="hljs-variable" style="color: #008080;">$ref</span>-&gt;[<span class="hljs-variable" style="color: #008080;">$low</span>] <span class="hljs-keyword" style="color: #333333; font-weight: bold;">or</span> <span class="hljs-variable" style="color: #008080;">$key</span> &gt; <span class="hljs-variable" style="color: #008080;">$ref</span>-&gt;[<span class="hljs-variable" style="color: #008080;">$high</span>]){
 <span class="hljs-keyword" style="color: #333333; font-weight: bold;">print</span> <span class="hljs-string" style="color: #dd1144;">"not exists !!!\n"</span>;
 <span class="hljs-keyword" style="color: #333333; font-weight: bold;">last</span>;
 }
 <span class="hljs-keyword" style="color: #333333; font-weight: bold;">if</span> (<span class="hljs-variable" style="color: #008080;">$ref</span>-&gt;[<span class="hljs-variable" style="color: #008080;">$low</span>] &gt; <span class="hljs-variable" style="color: #008080;">$ref</span>-&gt;[<span class="hljs-variable" style="color: #008080;">$high</span>]){
 <span class="hljs-keyword" style="color: #333333; font-weight: bold;">print</span> <span class="hljs-string" style="color: #dd1144;">"not sort array !!!\n"</span> ;
 <span class="hljs-keyword" style="color: #333333; font-weight: bold;">last</span>;
 }
 <span class="hljs-variable" style="color: #008080;">$mid</span>=<span class="hljs-keyword" style="color: #333333; font-weight: bold;">int</span> ((<span class="hljs-variable" style="color: #008080;">$low</span>+<span class="hljs-variable" style="color: #008080;">$high</span>)/<span class="hljs-number" style="color: #008080;">2</span>);
 <span class="hljs-keyword" style="color: #333333; font-weight: bold;">if</span> (<span class="hljs-variable" style="color: #008080;">$ref</span>-&gt;[<span class="hljs-variable" style="color: #008080;">$mid</span>] == <span class="hljs-variable" style="color: #008080;">$key</span>) { 
 <span class="hljs-keyword" style="color: #333333; font-weight: bold;">return</span> <span class="hljs-variable" style="color: #008080;">$mid</span>+<span class="hljs-number" style="color: #008080;">1</span>;
 }
 <span class="hljs-keyword" style="color: #333333; font-weight: bold;">elsif</span> (<span class="hljs-variable" style="color: #008080;">$ref</span>-&gt;[<span class="hljs-variable" style="color: #008080;">$mid</span>] &lt; <span class="hljs-variable" style="color: #008080;">$key</span>) {
 &amp;half_search(<span class="hljs-variable" style="color: #008080;">$ref</span>,<span class="hljs-variable" style="color: #008080;">$key</span>,<span class="hljs-variable" style="color: #008080;">$mid</span>+<span class="hljs-number" style="color: #008080;">1</span>,<span class="hljs-variable" style="color: #008080;">$high</span>);
 }
 <span class="hljs-keyword" style="color: #333333; font-weight: bold;">else</span>{
 &amp;half_search(<span class="hljs-variable" style="color: #008080;">$ref</span>,<span class="hljs-variable" style="color: #008080;">$key</span>,<span class="hljs-variable" style="color: #008080;">$low</span>,<span class="hljs-variable" style="color: #008080;">$mid</span>-<span class="hljs-number" style="color: #008080;">1</span>);
 }
}
<span class="hljs-keyword" style="color: #333333; font-weight: bold;">print</span> &amp;half_search(\<span class="hljs-variable" style="color: #008080;">@a</span>,<span class="hljs-variable" style="color: #008080;">$b</span>);
</code></pre>
<blockquote style="margin: 1.2em 0px; border-left: 4px solid #dddddd; padding: 0px 1em; color: #777777; quotes: none;">
<p style="margin: 0px 0px 1.2em !important;">对排序好的数字数组来说，是非常简单的，非常快速。</p>
</blockquote>
<h3 id="-" style="margin: 1.3em 0px 1em; padding: 0px; font-weight: bold; font-size: 1.3em;">接下来是字符串数组的查找。</h3>
<pre style="font-size: 1em; font-family: Consolas, Inconsolata, Courier, monospace; line-height: 1.2em; margin: 1.2em 0px;"><code class="hljs language-perl" style="font-size: 0.85em; font-family: Consolas, Inconsolata, Courier, monospace; margin: 0px 0.15em; padding: 0.5em; white-space: pre; border: 1px solid #cccccc; background-color: #f8f8f8; border-radius: 3px; display: block; overflow: auto; overflow-x: auto; color: #333333; background: #f8f8f8; text-size-adjust: none;"><span class="hljs-variable" style="color: #008080;">@a</span>=<span class="hljs-string" style="color: #dd1144;">qw(a b c d e f g h )</span>;
<span class="hljs-variable" style="color: #008080;">$b</span>=<span class="hljs-string" style="color: #dd1144;">'d'</span>;
<span class="hljs-sub"><span class="hljs-keyword" style="color: #333333; font-weight: bold;">sub</span> half_search{</span>
 <span class="hljs-keyword" style="color: #333333; font-weight: bold;">my</span>(<span class="hljs-variable" style="color: #008080;">$ref</span>,<span class="hljs-variable" style="color: #008080;">$key</span>,<span class="hljs-variable" style="color: #008080;">$low</span>,<span class="hljs-variable" style="color: #008080;">$high</span>)=<span class="hljs-variable" style="color: #008080;">@_</span>;
 <span class="hljs-variable" style="color: #008080;">$high</span>=@{<span class="hljs-variable" style="color: #008080;">$ref</span>}-<span class="hljs-number" style="color: #008080;">1</span> <span class="hljs-keyword" style="color: #333333; font-weight: bold;">unless</span> <span class="hljs-variable" style="color: #008080;">$high</span>;
 <span class="hljs-keyword" style="color: #333333; font-weight: bold;">if</span> (<span class="hljs-variable" style="color: #008080;">$key</span> <span class="hljs-keyword" style="color: #333333; font-weight: bold;">lt</span> <span class="hljs-variable" style="color: #008080;">$ref</span>-&gt;[<span class="hljs-variable" style="color: #008080;">$low</span>] <span class="hljs-keyword" style="color: #333333; font-weight: bold;">or</span> <span class="hljs-variable" style="color: #008080;">$key</span> <span class="hljs-keyword" style="color: #333333; font-weight: bold;">gt</span> <span class="hljs-variable" style="color: #008080;">$ref</span>-&gt;[<span class="hljs-variable" style="color: #008080;">$high</span>]){
 <span class="hljs-keyword" style="color: #333333; font-weight: bold;">print</span> <span class="hljs-string" style="color: #dd1144;">"not exists !!!\n"</span>;
 <span class="hljs-keyword" style="color: #333333; font-weight: bold;">last</span>;
 }
 <span class="hljs-keyword" style="color: #333333; font-weight: bold;">if</span> (<span class="hljs-variable" style="color: #008080;">$ref</span>-&gt;[<span class="hljs-variable" style="color: #008080;">$low</span>] <span class="hljs-keyword" style="color: #333333; font-weight: bold;">gt</span> <span class="hljs-variable" style="color: #008080;">$ref</span>-&gt;[<span class="hljs-variable" style="color: #008080;">$high</span>]){
 <span class="hljs-keyword" style="color: #333333; font-weight: bold;">print</span> <span class="hljs-string" style="color: #dd1144;">"not sort array !!!\n"</span> ;
 <span class="hljs-keyword" style="color: #333333; font-weight: bold;">last</span>;
 }
 <span class="hljs-variable" style="color: #008080;">$mid</span>=<span class="hljs-keyword" style="color: #333333; font-weight: bold;">int</span> ((<span class="hljs-variable" style="color: #008080;">$low</span>+<span class="hljs-variable" style="color: #008080;">$high</span>)/<span class="hljs-number" style="color: #008080;">2</span>);
 <span class="hljs-keyword" style="color: #333333; font-weight: bold;">if</span> (<span class="hljs-variable" style="color: #008080;">$ref</span>-&gt;[<span class="hljs-variable" style="color: #008080;">$mid</span>] eq <span class="hljs-variable" style="color: #008080;">$key</span>) { 
 <span class="hljs-keyword" style="color: #333333; font-weight: bold;">return</span> <span class="hljs-variable" style="color: #008080;">$mid</span>+<span class="hljs-number" style="color: #008080;">1</span>;
 }
 <span class="hljs-keyword" style="color: #333333; font-weight: bold;">elsif</span> (<span class="hljs-variable" style="color: #008080;">$ref</span>-&gt;[<span class="hljs-variable" style="color: #008080;">$mid</span>] <span class="hljs-keyword" style="color: #333333; font-weight: bold;">gt</span> <span class="hljs-variable" style="color: #008080;">$key</span>) {
 &amp;half_search(<span class="hljs-variable" style="color: #008080;">$ref</span>,<span class="hljs-variable" style="color: #008080;">$key</span>,<span class="hljs-variable" style="color: #008080;">$mid</span>+<span class="hljs-number" style="color: #008080;">1</span>,<span class="hljs-variable" style="color: #008080;">$high</span>);
 }
 <span class="hljs-keyword" style="color: #333333; font-weight: bold;">else</span>{
 &amp;half_search(<span class="hljs-variable" style="color: #008080;">$ref</span>,<span class="hljs-variable" style="color: #008080;">$key</span>,<span class="hljs-variable" style="color: #008080;">$low</span>,<span class="hljs-variable" style="color: #008080;">$mid</span>-<span class="hljs-number" style="color: #008080;">1</span>);
 }
}
<span class="hljs-keyword" style="color: #333333; font-weight: bold;">print</span> &amp;half_search(\<span class="hljs-variable" style="color: #008080;">@a</span>,<span class="hljs-variable" style="color: #008080;">$b</span>);
</code></pre>
<p style="margin: 0px 0px 1.2em !important;">本人亲测可用，就不贴图啦!</p>
<div style="height: 0; width: 0; max-height: 0; max-width: 0; overflow: hidden; font-size: 0em; padding: 0; margin: 0;" title="MDH:PHA+IyBwZXJs5a6e546w5LqM5YiG5rOV5p+l5om+PGJyPiZndDsg5ZyocGVybOmHjOmdouWtl+es
puS4sui3n+aVsOWtl+aYr+S4jeWMuuWIhueahO+8jOaJgOS7peWGmeS7o+eggemcgOimgeiAg+iZ
keWIsOWug+S7rOeahOWMuuWIq++8gTwvcD48cD4jIyMg6aaW5YWI5piv5a+55pWw5a2X5p+l5om+
5p2l6K+077yM5omA5pyJ55qE5pON5L2c56ym6YO95pivJm5ic3A7Jmx0OyZuYnNwOywmZ3Q7Jm5i
c3A7LD09562J562JPGJyPmBgYHBlcmw8YnI+QGE9MS4uMTAwMDs8YnI+JGI9NTY7Jm5ic3A7I2p1
c3QmbmJzcDthJm5ic3A7ZXhhbXBsZTxicj5zdWImbmJzcDtoYWxmX3NlYXJjaHs8YnI+IG15KCRy
ZWYsJGtleSwkbG93LCRoaWdoKT1AXzs8YnI+ICRoaWdoPUB7JHJlZn0tMSZuYnNwO3VubGVzcyZu
YnNwOyRoaWdoOzxicj4gaWYmbmJzcDsoJGtleSZuYnNwOyZsdDsmbmJzcDskcmVmLSZndDtbJGxv
d10mbmJzcDtvciZuYnNwOyRrZXkmbmJzcDsmZ3Q7Jm5ic3A7JHJlZi0mZ3Q7WyRoaWdoXSl7PGJy
PiBwcmludCZuYnNwOyJub3QmbmJzcDtleGlzdHMmbmJzcDshISFcbiI7PGJyPiBsYXN0Ozxicj4g
fTxicj4gaWYmbmJzcDsoJHJlZi0mZ3Q7WyRsb3ddJm5ic3A7Jmd0OyZuYnNwOyRyZWYtJmd0O1sk
aGlnaF0pezxicj4gcHJpbnQmbmJzcDsibm90Jm5ic3A7c29ydCZuYnNwO2FycmF5Jm5ic3A7ISEh
XG4iJm5ic3A7Ozxicj4gbGFzdDs8YnI+IH08YnI+ICRtaWQ9aW50Jm5ic3A7KCgkbG93KyRoaWdo
KS8yKTs8YnI+IGlmJm5ic3A7KCRyZWYtJmd0O1skbWlkXSZuYnNwOz09Jm5ic3A7JGtleSkmbmJz
cDt7Jm5ic3A7PGJyPiByZXR1cm4mbmJzcDskbWlkKzE7PGJyPiB9PGJyPiBlbHNpZiZuYnNwOygk
cmVmLSZndDtbJG1pZF0mbmJzcDsmbHQ7Jm5ic3A7JGtleSkmbmJzcDt7PGJyPiAmYW1wO2hhbGZf
c2VhcmNoKCRyZWYsJGtleSwkbWlkKzEsJGhpZ2gpOzxicj4gfTxicj4gZWxzZXs8YnI+ICZhbXA7
aGFsZl9zZWFyY2goJHJlZiwka2V5LCRsb3csJG1pZC0xKTs8YnI+IH08YnI+fTxicj5wcmludCZu
YnNwOyZhbXA7aGFsZl9zZWFyY2goXEBhLCRiKTs8YnI+YGBgPGJyPiZndDsg5a+55o6S5bqP5aW9
55qE5pWw5a2X5pWw57uE5p2l6K+077yM5piv6Z2e5bi4566A5Y2V55qE77yM6Z2e5bi45b+r6YCf
44CCPC9wPjxwPiMjIyDmjqXkuIvmnaXmmK/lrZfnrKbkuLLmlbDnu4TnmoTmn6Xmib7jgII8YnI+
YGBgcGVybDxicj5AYT1xdyhhJm5ic3A7YiZuYnNwO2MmbmJzcDtkJm5ic3A7ZSZuYnNwO2YmbmJz
cDtnJm5ic3A7aCZuYnNwOyk7PGJyPiRiPSdkJzs8YnI+c3ViJm5ic3A7aGFsZl9zZWFyY2h7PGJy
PiBteSgkcmVmLCRrZXksJGxvdywkaGlnaCk9QF87PGJyPiAkaGlnaD1AeyRyZWZ9LTEmbmJzcDt1
bmxlc3MmbmJzcDskaGlnaDs8YnI+IGlmJm5ic3A7KCRrZXkmbmJzcDtsdCZuYnNwOyRyZWYtJmd0
O1skbG93XSZuYnNwO29yJm5ic3A7JGtleSZuYnNwO2d0Jm5ic3A7JHJlZi0mZ3Q7WyRoaWdoXSl7
PGJyPiBwcmludCZuYnNwOyJub3QmbmJzcDtleGlzdHMmbmJzcDshISFcbiI7PGJyPiBsYXN0Ozxi
cj4gfTxicj4gaWYmbmJzcDsoJHJlZi0mZ3Q7WyRsb3ddJm5ic3A7Z3QmbmJzcDskcmVmLSZndDtb
JGhpZ2hdKXs8YnI+IHByaW50Jm5ic3A7Im5vdCZuYnNwO3NvcnQmbmJzcDthcnJheSZuYnNwOyEh
IVxuIiZuYnNwOzs8YnI+IGxhc3Q7PGJyPiB9PGJyPiAkbWlkPWludCZuYnNwOygoJGxvdyskaGln
aCkvMik7PGJyPiBpZiZuYnNwOygkcmVmLSZndDtbJG1pZF0mbmJzcDtlcSZuYnNwOyRrZXkpJm5i
c3A7eyZuYnNwOzxicj4gcmV0dXJuJm5ic3A7JG1pZCsxOzxicj4gfTxicj4gZWxzaWYmbmJzcDso
JHJlZi0mZ3Q7WyRtaWRdJm5ic3A7Z3QmbmJzcDska2V5KSZuYnNwO3s8YnI+ICZhbXA7aGFsZl9z
ZWFyY2goJHJlZiwka2V5LCRtaWQrMSwkaGlnaCk7PGJyPiB9PGJyPiBlbHNlezxicj4gJmFtcDto
YWxmX3NlYXJjaCgkcmVmLCRrZXksJGxvdywkbWlkLTEpOzxicj4gfTxicj59PGJyPnByaW50Jm5i
c3A7JmFtcDtoYWxmX3NlYXJjaChcQGEsJGIpOzxicj5gYGA8L3A+PHA+5pys5Lq65Lqy5rWL5Y+v
55So77yM5bCx5LiN6LS05Zu+5ZWmITwvcD4=">​</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.bio-info-trainee.com/394.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
