Quickselect algorithm: Difference between revisions
Content added Content deleted
No edit summary |
(Quickselect algorithm en FreeBASIC) |
||
Line 1,212: | Line 1,212: | ||
Given an intention to make many calls on FINDELEMENT for the same array, the array might as well be fully sorted first by a routine specialising in that. Otherwise, if say going for quartiles, it would be better to start with the median and work out so as to have a better chance of avoiding unfortunate "pivot" values. |
Given an intention to make many calls on FINDELEMENT for the same array, the array might as well be fully sorted first by a routine specialising in that. Otherwise, if say going for quartiles, it would be better to start with the median and work out so as to have a better chance of avoiding unfortunate "pivot" values. |
||
=={{header|FreeBASIC}}== |
|||
Una implementación directa del pseudocódigo de Wikipedia. |
|||
<lang freebasic> |
|||
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 |
|||
</lang> |
|||
{{out}} |
|||
<pre> |
|||
Array desordenado: 9 8 7 6 5 0 1 2 3 4 |
|||
Array ordenado: 0 1 2 3 4 5 6 7 8 9 |
|||
</pre> |
|||
=={{header|Go}}== |
=={{header|Go}}== |