Dim Shared As Long array(9), pivote Function QuickPartition (array() As Long, izda As Long, dcha As Long, pivote As Long) As Long Dim As Long pivotValue = array(pivote) Swap array(pivote), array(dcha) Dim As Long indice = izda For i As Long = izda To dcha-1 If array(i) < pivotValue Then Swap array(indice), array(i) indice += 1 End If Next i Swap array(dcha), array(indice) Return indice End Function Function QuickSelect(array() As Long, izda As Long, dcha As Long, k As Long) As Long Do If izda = dcha Then Return array(izda) : End If pivote = izda pivote = QuickPartition(array(), izda, dcha, pivote) Select Case k Case pivote Return array(k) Case Is < pivote dcha = pivote - 1 Case Is > pivote izda = pivote + 1 End Select Loop End Function Dim As Long a = Lbound(array), b = Ubound(array) Print "Array desordenado: "; For i As Long = a To b Read array(i) Print array(i); Next i Data 9, 8, 7, 6, 5, 0, 1, 2, 3, 4 Print !"\n\n Array ordenado: "; For i As Long = a To b Print QuickSelect(array(), a, b, i); Next i Sleep