擅长:python、mysql、java
<p>正如您所说的,最坏的情况是L3(或L2)的所有数字都小于L1,因为IF子句将失败,它将执行elif部分计算更多的比较。在</p>
<p>在第一个IF(假设我们将把每个布尔值的检查都作为一个单独的比较,比如done1、done2等等),并考虑到逻辑表达式通常是以一种惰性的方式计算的,最坏的情况是永远不会在其他人之前到达done1=true(这是因为L1的值大于L2和L3),done2也不会达到true(可以保证L2中的值大于L3),所以L1[i1]<;L2[i2]在每个步骤中都会被计算出来。在</p>
<p>当L3完成时,每个循环进入IF部分,由于done3为真,因此只执行4次比较,由于懒惰,最后一次比较不计算。当进入elif部分时同样适用,只执行2次比较。在</p>
<p>当L2完成时,IF子句中只执行3个比较(因为done2和done3为true)</p>
<p>因此,有了这种配置(L1>;>L2>;>L3),此算法将执行:</p>
<p>Len(L3)*(3(while子句)+5(IF子句)+3(elif部分)+1(done3计算)+
Len(L2)*(3(while子句)+4(IF子句)+2(elif部分)+1(done2计算)+
Len(L1)*(3(while子句)+3(IF子句)+1(done1计算)</p>
<p>所以最后的计数是</p>
<p>长度(L3)*12+长度(L2)*10+长度(L1)*7</p>
<p>在3个数组排序的任何情况下,计算顺序都是相同的,顺序是Len(3)+Len(2)+Len(1)</p>