Quicksort: Difference between revisions
Jump to navigation
Jump to search
No edit summary |
No edit summary |
||
Line 8: | Line 8: | ||
<div style="font-size: 1.2em; margin:.5em 0 .5em 0;text-align:center">[https://openlearnware.tu-darmstadt.de/#!/resource/quick-sort-1945 Openlearnware]</div> | <div style="font-size: 1.2em; margin:.5em 0 .5em 0;text-align:center">[https://openlearnware.tu-darmstadt.de/#!/resource/quick-sort-1945 Openlearnware]</div> | ||
</div> | </div> | ||
==== Invariant ==== | |||
At the beginning of each iteration of the loop of lines 3-6, for any array index ''k'', | |||
:1. If ''p'' ≤ ''k'' ≤ ''i'', then ''A''[''k''] ≤ x. | |||
:2. If ''i'' +1 ≤ ''k'' ≤ ''j'' - 1, then ''A''[''k''] > x | |||
:3. If ''k'' = ''r'', then ''A''[''k''] = ''x'' | |||
==== Initialization ==== | |||
Prior to the first iteration of the loop, ''i'' = ''p'' -1 and ''j'' = ''p''. Because no values lie between ''p'' and ''i'' and no values lie between ''i'' +1 and ''j'' -1, the first two conditions of the loop invariant are trivially satisfied. The assignment in line 1 satifies the third condition. | |||
==== Quicksort(''A'',''p'',''r'') ==== | ==== Quicksort(''A'',''p'',''r'') ==== | ||
:'''if''' ''p'' < ''r'' | :'''if''' ''p'' < ''r'' |
Revision as of 13:26, 11 September 2014
Invariant
At the beginning of each iteration of the loop of lines 3-6, for any array index k,
- 1. If p ≤ k ≤ i, then A[k] ≤ x.
- 2. If i +1 ≤ k ≤ j - 1, then A[k] > x
- 3. If k = r, then A[k] = x
Initialization
Prior to the first iteration of the loop, i = p -1 and j = p. Because no values lie between p and i and no values lie between i +1 and j -1, the first two conditions of the loop invariant are trivially satisfied. The assignment in line 1 satifies the third condition.
Quicksort(A,p,r)
- if p < r
- Partition(A,p,r)
- Quicksort(A,p,q - 1)
- Quicksort(A,q + 1,r)
Partition(A,p,r)
- x = A[r]
- i = p - 1
- for j = p to r - 1
- if A[j] ≤ x
- i = i + 1
- exchange A[i] with A[j]
- if A[j] ≤ x
- exchange A[i + 1] with A[r]
- return i + 1