mmbasic:shell_sort
Shell Sort
For completeness, below is an MMBasic version of a Shell sort - it is about four to five times faster than a bubble sort but does have a serious caveat in that it can fail if the data is in an unfortunate order - this is just a fact of life for Shell sort. That said, it is very unlikely to happen but be warned.
Before choosing a sort algorithm, read this article.
Example:
Option Base 0 Dim xx As Integer xx=my_arraysize 'lack of UBOUND() means we have to manually track the array size Dim SP$(xx) ShellSort xx
ShellSort:
SUB ShellSort(SPTop) LOCAL INTEGER i,j LOCAL FLOAT k LOCAL STRING a$ k = INT(SPTop / 2) WHILE k > 0 FOR i = 1 to SPTop j = i a$ = SP$(i) WHILE (j >= k+1 AND SP$(ABS(j-k)) > a$) SP$(j) = SP$(j-k) j = j - k WEND sp$(j) = a$ NEXT IF k = 2 THEN k = 1 ELSE k = INT(k * 0.454545) ' 5/11 sort balancing value END IF WEND END SUB
mmbasic/shell_sort.txt · Last modified: 2024/01/19 09:30 by 127.0.0.1