RosettaCodeData/Task/Quickselect-algorithm/FreeBASIC/quickselect-algorithm.basic

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