<snapdata remixID="10989905"><project name="Bubble/Quick" app="Snap! 6, https://snap.berkeley.edu" version="1"><notes></notes><thumbnail>data:image/png;base64,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</thumbnail><stage name="Stage" width="480" height="360" costume="0" color="255,255,255,1" tempo="60" threadsafe="false" penlog="false" volume="100" pan="0" lines="round" ternary="false" hyperops="true" codify="false" inheritance="true" sublistIDs="false" scheduled="false" id="1"><pentrails>data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAeAAAAFoCAYAAACPNyggAAAAAXNSR0IArs4c6QAADoVJREFUeF7t1cEJAAAIxDDdf2m3sJ+4wEEQuuMIECBAgACBd4F9XzRIgAABAgQIjAB7AgIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECByxcQFpoRMBzwAAAABJRU5ErkJggg==</pentrails><costumes><list struct="atomic" id="2"></list></costumes><sounds><list struct="atomic" id="3"></list></sounds><variables></variables><blocks></blocks><scripts></scripts><sprites><sprite name="Sprite" idx="1" x="0" y="-1.4210854715202004e-13" heading="90" scale="1" volume="100" pan="0" rotation="1" draggable="true" costume="0" color="80,80,80,1" pen="tip" id="8"><costumes><list struct="atomic" id="9"></list></costumes><sounds><list struct="atomic" id="10"></list></sounds><blocks></blocks><variables></variables><scripts><script x="20" y="20"><block s="doSetVar"><l>thelist</l><block s="reportNumbers"><l>1</l><l>10</l></block><comment w="348" collapsed="false">Try executing these scripts and see what the list looks like on the stage </comment></block><custom-block s="swap item: %n and item: %n of list: %l"><l>3</l><l>7</l><block var="thelist"/></custom-block></script><script x="20" y="84.83333333333326"><block s="doSetVar"><l>thelist</l><block s="reportNumbers"><l>1</l><l>10</l></block></block><custom-block s="reverse list: %l"><block var="thelist"/></custom-block></script><script x="20" y="149.66666666666657"><block s="doSetVar"><l>thelist</l><block s="reportNumbers"><l>1</l><l>10</l></block></block><custom-block s="scramble list: %l"><block var="thelist"/></custom-block></script><script x="20" y="373.1666666666665"><block s="doSetVar"><l>thelist</l><block s="reportNumbers"><l>1</l><l>10</l></block><comment w="252.236328125" collapsed="false">Execute this script to see how many operations it takes to quick-sort a scrambled list.</comment></block><custom-block s="scramble list: %l"><block var="thelist"/></custom-block><custom-block s="quick sort list: %l with %predRing comps: %upvar swaps: %upvar"><block var="thelist"/><block s="reifyPredicate"><autolambda><block s="reportLessThan"><l></l><l></l></block></autolambda><list></list></block><l>ncomps</l><l>nswaps</l></custom-block><block s="doSetVar"><l>COMPS</l><block var="ncomps"/></block><block s="doSetVar"><l>SWAPS</l><block var="nswaps"/></block></script><comment x="20" y="552.6666666666666" w="349" collapsed="false">Test and analyze for each of the sort algorithms:&#xD;&#xD;* What is the relationship between COMPS and SWAPS?&#xD;* Use the &gt; predicate instead&#xD;* Change the size of the list&#xD;* Instead of scrambling, sort an already-sorted list, or a reverse-sorted list.</comment><script x="265" y="239.00000000000003"><block s="doSetVar"><l>thelist</l><l>0</l></block></script><script x="934" y="50.66666666666666"><block s="reportListIndex"><l>thing</l><block var="thelist"/></block></script><script x="384" y="177.00000000000003"><block s="doAddToList"><l>thing</l><l/></block></script><script x="527.76953125" y="234.00000000000003"><block s="reportFindFirst"><block s="reifyPredicate"><script></script><list></list></block><l/></block></script><script x="854" y="140.83333333333334"><block s="doSetVar"><l>thelist</l><block s="reportNumbers"><l>1</l><l>3</l><comment w="253" collapsed="false">Execute this script to see how many operations it takes to bubble-sort a scrambled list. </comment></block></block></script><script x="875" y="237.1666666666667"><block s="doAsk"><l>What is x?</l></block><block s="doReplaceInList"><l>1</l><block var="thelist"/><block s="getLastAnswer"></block></block><block s="doAsk"><l>What is y?</l></block><block s="doReplaceInList"><l>2</l><block var="thelist"/><block s="getLastAnswer"></block></block><block s="doAsk"><l>What is z?</l></block><block s="doReplaceInList"><l>3</l><block var="thelist"/><block s="getLastAnswer"></block></block><custom-block s="scramble list: %l"><block var="thelist"/></custom-block><custom-block s="bubble sort list: %l with comparator: %predRing comps: %upvar swaps: %upvar"><block var="thelist"/><block s="reifyPredicate"><autolambda><block s="reportLessThan"><l></l><l></l></block></autolambda><list></list></block><l>ncomps</l><l>nswaps</l></custom-block><block s="doSetVar"><l>COMPS</l><block var="ncomps"/></block><block s="doSetVar"><l>SWAPS</l><block var="nswaps"/></block></script></scripts></sprite><watcher var="COMPS" style="normal" x="174.00000000000023" y="12.000001999999988" color="243,118,29"/><watcher var="SWAPS" style="normal" x="174.00000000000023" y="43.00000400000005" color="243,118,29"/><watcher var="thelist" style="normal" x="5.999999999999545" y="36" color="243,118,29" extX="80" extY="70"/></sprites></stage><hidden></hidden><headers></headers><code></code><blocks><block-definition s="swap item: %&apos;i&apos; and item: %&apos;j&apos; of list: %&apos;list&apos;" type="command" category="lists"><comment x="0" y="0" w="149" collapsed="false">Replaces the ith and jth items in the list with each other. No bounds checking</comment><header></header><code></code><translations></translations><inputs><input type="%n"></input><input type="%n"></input><input type="%l"></input></inputs><script><block s="doDeclareVariables"><list><l>hold item i for a sec</l></list></block><block s="doSetVar"><l>hold item i for a sec</l><block s="reportListItem"><block var="i"/><block var="list"/></block></block><block s="doReplaceInList"><block var="i"/><block var="list"/><block s="reportListItem"><block var="j"/><block var="list"/></block></block><block s="doReplaceInList"><block var="j"/><block var="list"/><block var="hold item i for a sec"/></block></script></block-definition><block-definition s="bubble sort list: %&apos;list&apos; with comparator: %&apos;compr&apos; comps: %&apos;ncomps&apos; swaps: %&apos;nswaps&apos;" type="command" category="lists"><comment x="0" y="0" w="207" collapsed="false">Use the bubble sort algorithm to sort a list of any kind of object, using a comparator (1-input reporter that reports whether the first input belongs before the second). &#xD;&#xD;For a &apos;normal&apos; increasing sort of numbers or strings, use the regular &lt; operator.&#xD;&#xD;Upvars ncomps and nswaps return a count of the number of calls to the comparator, and the number of times an out-of-order bubble is swapped. </comment><header></header><code></code><translations></translations><inputs><input type="%l"></input><input type="%predRing"></input><input type="%upvar"></input><input type="%upvar"></input></inputs><script><block s="doWarp"><script><block s="doSetVar"><l>ncomps</l><l>0</l></block><block s="doSetVar"><l>nswaps</l><l>0</l></block><block s="doFor"><l>maxi</l><block s="reportDifference"><block s="reportListAttribute"><l><option>length</option></l><block var="list"/></block><l>1</l></block><l>1</l><script><block s="doFor"><l>i</l><l>1</l><block var="maxi"/><script><block s="doChangeVar"><l>ncomps</l><l>1</l></block><block s="doIf"><block s="evaluate"><block var="compr"/><list><block s="reportListItem"><block s="reportSum"><block var="i"/><l>1</l></block><block var="list"/></block><block s="reportListItem"><block var="i"/><block var="list"/></block></list></block><script><block s="doChangeVar"><l>nswaps</l><l>1</l></block><custom-block s="swap item: %n and item: %n of list: %l"><block var="i"/><block s="reportSum"><block var="i"/><l>1</l></block><block var="list"/></custom-block></script><comment w="186" collapsed="false">If this comparator returns true, then items i and i+1 are out of order</comment></block></script></block></script><comment w="102" collapsed="false">n-1 passes&#xD;pass 1: i=1...n-1&#xD;pass 2: i=1...n-2 ...</comment></block></script></block></script></block-definition><block-definition s="scramble list: %&apos;list&apos;" type="command" category="lists"><comment x="0" y="0" w="90" collapsed="false">Scramble a list into a random order</comment><header></header><code></code><translations></translations><inputs><input type="%l"></input></inputs><script><block s="doFor"><l>i</l><l>1</l><block s="reportListAttribute"><l><option>length</option></l><block var="list"/></block><script><custom-block s="swap item: %n and item: %n of list: %l"><block var="i"/><block s="reportRandom"><l>1</l><block s="reportListAttribute"><l><option>length</option></l><block var="list"/></block></block><block var="list"/></custom-block></script></block></script></block-definition><block-definition s="reverse list: %&apos;list&apos;" type="command" category="lists"><comment x="0" y="0" w="150.767578125" collapsed="false">Put a list into reverse order</comment><header></header><code></code><translations></translations><inputs><input type="%l"></input></inputs><script><block s="doFor"><l>i</l><l>1</l><block s="reportQuotient"><block s="reportListAttribute"><l><option>length</option></l><block var="list"/></block><l>2</l></block><script><custom-block s="swap item: %n and item: %n of list: %l"><block var="i"/><block s="reportSum"><block s="reportDifference"><block s="reportListAttribute"><l><option>length</option></l><block var="list"/></block><block var="i"/></block><l>1</l></block><block var="list"/></custom-block></script></block></script></block-definition><block-definition s="quick sort list: %&apos;list&apos; with %&apos;comparator:&apos; comps: %&apos;ncomps&apos; swaps: %&apos;nswaps&apos;" type="command" category="lists"><comment x="0" y="0" w="132" collapsed="false">Use the quicksort algorithm to sort a list of any kind of object, using a comparator (1-input reporter that reports whether the first input belongs before the second). &#xD;&#xD;For a &apos;normal&apos; increasing sort of numbers or strings, use the regular &lt; operator.&#xD;&#xD;Upvars ncomps and nswaps return a count of the number of calls to the comparator, and the number of times a pair of items is swapped. </comment><header></header><code></code><translations></translations><inputs><input type="%l"></input><input type="%predRing"></input><input type="%upvar"></input><input type="%upvar"></input></inputs><script><custom-block s="quick sort from: %n to: %n of list: %l with %predRing comps: %upvar swaps: %upvar"><l>1</l><block s="reportListAttribute"><l><option>length</option></l><block var="list"/></block><block var="list"/><block var="comparator:"/><l>nc</l><l>ns</l></custom-block><block s="doSetVar"><l>ncomps</l><block var="nc"/></block><block s="doSetVar"><l>nswaps</l><block var="ns"/></block></script></block-definition><block-definition s="quick sort from: %&apos;lo&apos; to: %&apos;hi&apos; of list: %&apos;list&apos; with %&apos;comparator:&apos; comps: %&apos;nc&apos; swaps: %&apos;ns&apos;" type="command" category="lists"><comment x="0" y="0" w="305" collapsed="false">This is the real quicksort implementation, which:&#xD;* picks item[lo] as the &apos;pivot&apos;&#xD;* swaps within the range lo...hi to become (&lt;pivot)pivot(&gt;pivot)&#xD;* recursively sorts subranges (&lt;pivot) and (&gt;pivot)&#xD;The main quicksort wrapper just calls this on the range of the full list</comment><header></header><code></code><translations></translations><inputs><input type="%n"></input><input type="%n"></input><input type="%l"></input><input type="%predRing"></input><input type="%upvar"></input><input type="%upvar"></input></inputs><script><block s="doWarp"><script><block s="doDeclareVariables"><list><l>n</l><l>pivi</l><l>bigi</l></list></block><block s="doSetVar"><l>nc</l><l>0</l></block><block s="doSetVar"><l>ns</l><l>0</l></block><block s="doSetVar"><l>n</l><block s="reportSum"><block s="reportDifference"><block var="hi"/><block var="lo"/></block><l>1</l><comment w="191.99999999999994" collapsed="false">number of elements in the range lo...hi</comment></block></block><block s="doIf"><block s="reportEquals"><block var="n"/><l>2</l><comment w="114" collapsed="false">If the range is just two, compare them and swap if out of order. Count 1 comparator call for sure, and maybe one swap</comment></block><script><block s="doChangeVar"><l>nc</l><l>1</l></block><block s="doIf"><block s="evaluate"><block var="comparator:"/><list><block s="reportListItem"><block var="hi"/><block var="list"/></block><block s="reportListItem"><block var="lo"/><block var="list"/></block></list></block><script><custom-block s="swap item: %n and item: %n of list: %l"><block var="lo"/><block var="hi"/><block var="list"/></custom-block><block s="doChangeVar"><l>ns</l><l>1</l></block></script></block></script></block><block s="doIf"><block s="reportGreaterThan"><block var="n"/><l>2</l><comment w="335.8203125" collapsed="false">For a larger range, we pick a pivot and reorder the range &lt; and &gt; the pivot.&#xD;Note there is no if for n=0 or 1, so for those base cases the function do nothing and return. </comment></block><script><block s="doSetVar"><l>pivi</l><block var="lo"/></block><block s="doSetVar"><l>bigi</l><block var="hi"/></block><block s="doRepeat"><block s="reportDifference"><block var="n"/><l>1</l></block><script><block s="doIfElse"><block s="evaluate"><block var="comparator:"/><list><block s="reportListItem"><block var="pivi"/><block var="list"/></block><block s="reportListItem"><block s="reportSum"><block var="pivi"/><l>1</l></block><block var="list"/></block></list><comment w="276" collapsed="false">Compare the pivot and the next element. If they are in order...</comment></block><script><custom-block s="swap item: %n and item: %n of list: %l"><block s="reportSum"><block var="pivi"/><l>1</l></block><block var="bigi"/><block var="list"/><comment w="277" collapsed="false">...then the next element belongs on the big side of the pivot; swap it to the big side and decrement the big-side index </comment></custom-block><block s="doChangeVar"><l>bigi</l><l>-1</l></block></script><script><custom-block s="swap item: %n and item: %n of list: %l"><block var="pivi"/><block s="reportSum"><block var="pivi"/><l>1</l></block><block var="list"/><comment w="276" collapsed="false">...else the next element belongs on the small side of the pivot; swap it behind the pivot and increment the pivot </comment></custom-block><block s="doChangeVar"><l>pivi</l><l>1</l></block></script></block><block s="doChangeVar"><l>nc</l><l>1</l><comment w="166" collapsed="false">We just called the comparator once, and swapped once. </comment></block><block s="doChangeVar"><l>ns</l><l>1</l></block></script></block><custom-block s="quick sort from: %n to: %n of list: %l with %predRing comps: %upvar swaps: %upvar"><block var="lo"/><block s="reportDifference"><block var="pivi"/><l>1</l></block><block var="list"/><block var="comparator:"><comment w="280" collapsed="false">Recursively sort the subrange less than the pivot </comment></block><l>ncomps</l><l>nswaps</l></custom-block><block s="doChangeVar"><l>nc</l><block var="ncomps"/></block><block s="doChangeVar"><l>ns</l><block var="nswaps"/></block><custom-block s="quick sort from: %n to: %n of list: %l with %predRing comps: %upvar swaps: %upvar"><block s="reportSum"><block var="pivi"/><l>1</l></block><block var="hi"/><block var="list"/><block var="comparator:"/><l>ncomps</l><l>nswaps</l><comment w="282" collapsed="false">Recursively sort the subrange greater than the pivot</comment></custom-block><block s="doChangeVar"><l>nc</l><block var="ncomps"/></block><block s="doChangeVar"><l>ns</l><block var="nswaps"/></block></script></block></script></block></script></block-definition></blocks><variables><variable name="thelist"><list struct="atomic" id="444">2,9,20</list></variable><variable name="COMPS"><l>3</l></variable><variable name="SWAPS"><l>3</l></variable></variables></project><media name="Bubble/Quick" app="Snap! 6, https://snap.berkeley.edu" version="1"></media></snapdata>