Sort Numeric Array

Category: Arrays

Date: 02-16-2022

Return to Index


 
'The built-in PowerBASIC Array Scan is capable of sorting all or part of
'an array (both numeric and string). It also supports the use of a Tag array,
'which can be of a different Type than the main array.
 
'Syntax (Numeric Array):
'ARRAY SORT darray([index]) [FOR count] [,TAGARRAY tarray()] [,{ASCEND | DESCEND}]
'All or some elements of an array can be sorted
'Ascending/Descending sort options
'TAG array supported - its elements are swapped in the same order as the sorted array
 
'Primary Code (eight examples):
Array Sort MyArray()                             'sorts entire array, ascending (default)
Array Sort MyArray(), Descend                    'sorts entire array, descending
Array Sort MyArray(5)                            'sorts array from 5 to UBound(MyArray), ascending
Array Sort MyArray(5), Descend                   'sorts array from 5 to UBound(MyArray), descending
Array Sort MyArray(5) For 3                      'sorts elements 5-7, ascending
Array Sort MyArray(5) For 3 ,Descend             'sorts elements 5-7, descending
Array Sort MyArray(), TAGARRAY MyTagArray()      'sorts entire array, ascending (default). MyTagArray() elements swapped same as MyArray()
Array Sort MyArray(), TAGARRAY MyTagArray(), Descend    'sorts entire array, descending.  MyTagArray() elements swapped same as MyArray()
 
 
'Compilable Example:  (Jose Includes)
#Compiler PBWin 9, PBWin 10
#Compile EXE
#Dim All
%Unicode=1
#Include "Win32API.inc"
Global hDlg As DWord, MyArray() as Long, MyTagArray() as String
 
Function PBMain() As Long
   Dialog New Pixels, 0, "Array Insert Test Code",300,300,270,320, %WS_OverlappedWindow To hDlg
   Control Add Label, hDlg, 100, "Array Values:  8 0 1 6 3 7 5 2 4", 10,10, 270,20
   Control Add Label, hDlg, 150, "TagArray Values:  58 50 51 56 53 57 55 52 54", 10,40,270,20
   Control Add Button, hDlg, 200, "Entire array, ascending", 10,70,240,25
   Control Add Button, hDlg, 300, "Entire array, descending", 10,100,240,25
   Control Add Button, hDlg, 400, "Start at 5, rest of array, ascending", 10,130,240,25
   Control Add Button, hDlg, 500, "Start as 5, rest of array, descending", 10,160,240,25
   Control Add Button, hDlg, 600, "Start at 5, elements 5-7, ascending", 10,190,240,25
   Control Add Button, hDlg, 700, "Start at 5, elements 5-7, descending", 10,220,240,25
   Control Add Button, hDlg, 800, "Entire array, ascending, with TAG aarray", 10,250,240,25
   Control Add Button, hDlg, 900, "Entire array, ascending, with TAG array", 10,280,240,25
   Dialog Show Modal hDlg Call DlgProc
End Function
 
CallBack Function DlgProc() As Long
   Local iResult&, i as Long, temp$
   ReDim MyArray(8), MyTagArray(8)
   If CB.Msg = %WM_Command AND CB.Ctlmsg = %BN_Clicked Then
      Array Assign MyArray() = 8,0,1,6,3,7,5,2,4
      Array Assign MyTagArray() = "58","50","51","56","53","57","55","52","54"
      Select Case CB.Ctl
         Case 200
            Array Sort MyArray()                   'sorts entire array, ascending (default)
         Case 300
            Array Sort MyArray(), Descend         'sorts entire array, descending
         Case 400
            Array Sort MyArray(5)                   'sorts array from 5 to UBound(MyArray), ascending
         Case 500
            Array Sort MyArray(5), Descend         'sorts array from 5 to UBound(MyArray), descending
         Case 600
            Array Sort MyArray(5) For 3                   'sorts elements 5-7, ascending
         Case 700
            Array Sort MyArray(5) For 3 ,Descend         'sorts elements 5-7, descending
         Case 800
            Array Sort MyArray(), TAGARRAY MyTagArray()      'sorts entire array, ascending (default). MyTagArray() elements swapped same as MyArray()
         Case 900
            Array Sort MyArray(), TAGARRAY MyTagArray(), Descend    'sorts entire array, descending.  MyTagArray() elements swapped same as MyArray()
      End Select
      temp$ = "Numeric Array now contains: " + $crlf + $crlf + Str$(myarray(0))
      For i = 1 To 8 : temp$ = temp$ + " - " + Str$(myarray(i)) : Next i
      temp$ = temp$ + $crlf + $crlf + "String Tag Array now contains:" + $crlf + $crlf + MyTagArray(0)
      For i = 1 To 8 : temp$ = temp$ + " - " + mytagarray(i) : Next i
      MsgBox temp$
   End If
End Function
 
'gbs_00074
'Date: 03-10-2012


created by gbSnippets
http://www.garybeene.com/sw/gbsnippets.htm