Quicksort: Difference between revisions

From Algowiki
Jump to navigation Jump to search
No edit summary
No edit summary
Line 29: Line 29:
:exchange ''A''[''i'' + 1] with ''A''[''r'']
:exchange ''A''[''i'' + 1] with ''A''[''r'']
:'''return''' ''i'' + 1
:'''return''' ''i'' + 1
==== Example ====
{|
|aaa
|aaa
|aasas
|-
|bbbb
|kdas
|kdas
|}

Revision as of 13:51, 11 September 2014

Invariant

At the beginning of each iteration of the loop of lines 3-6, for any array index k,

1. If pki, then A[k] ≤ x.
2. If i +1 ≤ kj - 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]
exchange A[i + 1] with A[r]
return i + 1

Example

aaa aaa aasas
bbbb kdas kdas