;Shell-Metzner Sort Start Dim List[100] Openin "c:\numsort.txt" Call LoadArray Call Sort Call PrintArray Stop Loadarray: Enter N = 0 FileRead Num While Not EOF N = N + 1 List[N] = Num FileRead Num ENDWHILE Exit Sort: Enter Dist = N WHILE Dist >= 2 Dist = Dist \ 2 Call OnePass ENDWHILE Exit OnePass: Enter I = 1 J = I + Dist WHILE J <= N IF List[I] > List[J] THEN CALL OrderNumber ENDIF I = I + 1 J = J + 1 ENDWHILE Exit OrderNumber: Enter C = I D = J Done = False WHILE C > 0 and NOT Done IF List[C] > List[D] THEN Call OrderPair C = C - Dist D = D - Dist ELSE Done = TRUE ENDIF ENDWHILE Exit OrderPair: Enter T = List[C] List[C] = List[D] List[D] = T Exit Exit PrintArray: Enter C = 1 WHILE C <= N Print List[C] C = C + 1 ENDWHILE Exit