merge-merger.html

来自「经典的数据结构源代码(java 实现)」· HTML 代码 · 共 48 行

HTML
48
字号
<html><head><title>Code Fragment</title></head><body text=#000000><center></center><br><br><dl><dd><pre><font color = #ff0080>/** Generic merge for sorted sequences. */</font><font color=#8000a0>public</font> <font color=#8000a0><font color=#ff8000>abstract</font> </font><font color=#ff8000>class</font> Merge&lt;E&gt; {  <font color=#8000a0><font color=#8000a0>private</font> </font>E a, b;			<font color=#ff0080>// current elements in A and B</font>  <font color=#8000a0><font color=#8000a0>private</font> </font>Iterator&lt;E&gt; iterA, iterB;	<font color=#ff0080>// iterators for A and B</font>  <font color = #ff0080>/** Template method */</font>  <font color=#8000a0><font color=#8000a0>public</font> </font><font color=#8000a0>void</font> <font color=#0000ff>merge</font>(PositionList&lt;E&gt; A, PositionList&lt;E&gt; B,         Comparator&lt;E&gt; comp, PositionList&lt;E&gt; C) {    iterA = A.<font color=#0000ff>iterator</font>();     iterB = B.<font color=#0000ff>iterator</font>();    <font color=#8000a0><font color=#8000a0>boolean</font> </font>aExists = <font color=#0000ff>advanceA</font>();  <font color=#ff0080>// Boolean test if there is a current a</font>    <font color=#8000a0><font color=#8000a0>boolean</font> </font>bExists = <font color=#0000ff>advanceB</font>();  <font color=#ff0080>// Boolean test if there is a current b</font>    <font color=#ff8000>while</font><font color=#0000ff> </font>(aExists && bExists) {   <font color=#ff0080>// Main loop for merging a and b</font>      <font color=#8000a0><font color=#8000a0>int</font> </font>x = comp.<font color=#0000ff>compare</font>(a, b);      <font color=#ff8000>if</font><font color=#0000ff> </font>(x &lt; 0) { <font color=#0000ff>aIsLess</font>(a, C);  aExists = <font color=#0000ff>advanceA</font>(); }      <font color=#8000a0><font color=#ff8000>else</font> </font><font color=#ff8000>if</font><font color=#0000ff> </font>(x == 0) {	<font color=#0000ff>bothAreEqual</font>(a, b, C); aExists = <font color=#0000ff>advanceA</font>(); bExists = <font color=#0000ff>advanceB</font>(); }       <font color=#ff8000>else</font> { <font color=#0000ff>bIsLess</font>(b, C);  bExists = <font color=#0000ff>advanceB</font>(); }    }    <font color=#ff8000>while</font><font color=#0000ff> </font>(aExists) { <font color=#0000ff>aIsLess</font>(a, C); aExists = <font color=#0000ff>advanceA</font>(); }    <font color=#ff8000>while</font><font color=#0000ff> </font>(bExists) { <font color=#0000ff>bIsLess</font>(b, C); bExists = <font color=#0000ff>advanceB</font>(); }  }  <font color=#ff0080>// auxiliary methods to be specialized by subclasses</font>  <font color=#8000a0><font color=#8000a0>protected</font> </font><font color=#8000a0>void</font> <font color=#0000ff>aIsLess</font>(E a, PositionList&lt;E&gt; C) { }  <font color=#8000a0><font color=#8000a0>protected</font> </font><font color=#8000a0>void</font> <font color=#0000ff>bothAreEqual</font>(E a, <font color=#8000a0>E </font>b, PositionList&lt;E&gt; C) { }  <font color=#8000a0><font color=#8000a0>protected</font> </font><font color=#8000a0>void</font> <font color=#0000ff>bIsLess</font>(E b, PositionList&lt;E&gt; C) { }  <font color=#ff0080>// helper methods</font>  <font color=#8000a0><font color=#8000a0>private</font> </font><font color=#8000a0>boolean</font> <font color=#0000ff>advanceA</font>() {    <font color=#ff8000>if</font><font color=#0000ff> </font>(iterA.<font color=#0000ff>hasNext</font>()) { a = iterA.<font color=#0000ff>next</font>(); <font color=#8000a0><font color=#ff8000>return</font> </font>true; }    <font color=#8000a0><font color=#ff8000>return</font> </font>false;  }  <font color=#8000a0><font color=#8000a0>private</font> </font><font color=#8000a0>boolean</font> <font color=#0000ff>advanceB</font>() {    <font color=#ff8000>if</font><font color=#0000ff> </font>(iterB.<font color=#0000ff>hasNext</font>()) { b = iterB.<font color=#0000ff>next</font>(); <font color=#8000a0><font color=#ff8000>return</font> </font>true; }    <font color=#8000a0><font color=#ff8000>return</font> </font>false;  }  } </dl></body></html>

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?