46 lines
1.2 KiB
Plaintext
46 lines
1.2 KiB
Plaintext
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
|