\begin{algorithm}
\caption{Fuzzy Quicksort}
\begin{algorithmic}
\INPUT a sequence of $n$ intervals $A$ , where $A[i].a$ and $A[i].b$ denotes the lower and upper bound of the interval
\OUTPUT a sorted sequence of input intervals
\STATE\CALL{FuzzyQuicksort}{$A, 1, n$}
\STATE
\PROCEDURE{FuzzyQuicksort}{$A, p, r$}
\IF{$p < r$}
\STATE $(q, t) =$ \CALL{FuzzyPartition}{$A, p, r$}
\STATE \CALL{FuzzyQuicksort}{$A, p, q-1$}
\STATE \CALL{FuzzyQuicksort}{$A, t+1, r$}
\ENDIF
\ENDPROCEDURE
\STATE
\PROCEDURE{FuzzyPartition}{$A, p, r$}
\STATE exchange $A[p]$ with $A[RANDOM(p, r)]$
\STATE $x = A[p]$
\STATE $q = p$
\STATE $t = p$
\FOR{$i = p + 1$ \TO $r$}
\IF{$A[i].b < x.a$} \COMMENT{interval less than condition}
\STATE exchange $A[q]$ with $A[i]$
\STATE $q = q + 1$
\STATE exchange $A[t+1]$ with $A[i]$
\STATE $t = t + 1$
\ELSEIF{$A[i].b \ge x.a$ \AND $A[i].a \le x.b$} \COMMENT{interval equal condition}
\STATE exchange $A[t+1]$ with $A[i]$
\STATE $t = t + 1$
\ENDIF
\ENDFOR
\RETURN $(q, t)$
\ENDPROCEDURE
\end{algorithmic}
\end{algorithm}