Performs an in-place QuickSort of an array (which can be
multi-dimensional). The sort is performed on the first element of
each dimension. If the first elements are equal, then the second
elements are compared, and so on.
There are several types of sorting algorithms, such as BubbleSort,
QuickSort, Insertion, Shaker, and Selection. The QuickSort
algorithm is very good at sorting large amounts of data
efficiently. It basically uses a divide-and-conquer approach.
Note: This method invokes the built-in JScript sort method when the
Array argument is a Jscript array. The JScript sort method uses a
case-sensitive text-based ordering, which is not likely to be the
intended result when sorting numeric data. A workaround is
demonstrated in the examples below.
XSIUtils.QuickSort( Object& io_Array ); |
XSIUtils.QuickSort( Array ); |
Parameter | Type | Description |
---|---|---|
Array | Array | The array to sort. |
' ' This example demonstrates how to sort an array with the QuickSort method. ' Dim aValues aValues = array(8,1,9,4,6) XSIUtils.QuickSort aValues for each item in aValues Application.LogMessage item next ' Expected result: 'INFO : "1" 'INFO : "4" 'INFO : "6" 'INFO : "8" 'INFO : "9" |
# # This example demonstrates how to sort an array with the QuickSort method. # aValues = [8,1,9,4,6] aValues = XSIUtils.QuickSort(aValues) for item in aValues: Application.LogMessage( '%(item)d'%vars() ) # Expected result: #INFO : "1" #INFO : "4" #INFO : "6" #INFO : "8" #INFO : "9" |
'VBScript example : sort of a 2 dimension array Dim TestArray() ReDim TestArray(4, 4) TestArray(0, 0) = -1.9 TestArray(1, 0) = 8 TestArray(2,0) = 4 TestArray(3,0) = 543 TestArray(4,0) = 0 TestArray(0, 1) = 3.2 TestArray(1, 1) = 5 TestArray(2,1) = -100 TestArray(3,1) = 99 TestArray(4,1) = 2 TestArray(0, 2) = 10.3 TestArray(1, 2) = 7 TestArray(2,2) = 6 TestArray(3,2) = 5 TestArray(4,2) = 4 TestArray(0, 3) = 3.2 TestArray(1, 3) = 9 TestArray(2,3) = 2 TestArray(3,3) = 3 TestArray(4,3) = 4 TestArray(0, 4) = -5.4 TestArray(1, 4) = 2 TestArray(2,4) = 1000 TestArray(3,4) = 500 TestArray(4,4) = 2000 Application.LogMessage "Array before sort : " Application.LogMessage TestArray(0, 0) & " " & TestArray(1, 0) & " " & TestArray(2, 0) & " " & TestArray(3, 0) & " " & TestArray(4, 0) Application.LogMessage TestArray(0, 1) & " " & TestArray(1, 1) & " " & TestArray(2, 1) & " " & TestArray(3, 1) & " " & TestArray(4, 1) Application.LogMessage TestArray(0, 2) & " " & TestArray(1, 2) & " " & TestArray(2, 2) & " " & TestArray(3, 2) & " " & TestArray(4, 2) Application.LogMessage TestArray(0, 3) & " " & TestArray(1, 3) & " " & TestArray(2, 3) & " " & TestArray(3, 3) & " " & TestArray(4, 3) Application.LogMessage TestArray(0, 4) & " " & TestArray(1, 4) & " " & TestArray(2, 4) & " " & TestArray(3, 4) & " " & TestArray(4, 4) XSIUtils.QuickSort TestArray Application.LogMessage "Array after sort : " Application.LogMessage TestArray(0, 0) & " " & TestArray(1, 0) & " " & TestArray(2, 0) & " " & TestArray(3, 0) & " " & TestArray(4, 0) Application.LogMessage TestArray(0, 1) & " " & TestArray(1, 1) & " " & TestArray(2, 1) & " " & TestArray(3, 1) & " " & TestArray(4, 1) Application.LogMessage TestArray(0, 2) & " " & TestArray(1, 2) & " " & TestArray(2, 2) & " " & TestArray(3, 2) & " " & TestArray(4, 2) Application.LogMessage TestArray(0, 3) & " " & TestArray(1, 3) & " " & TestArray(2, 3) & " " & TestArray(3, 3) & " " & TestArray(4, 3) Application.LogMessage TestArray(0, 4) & " " & TestArray(1, 4) & " " & TestArray(2, 4) & " " & TestArray(3, 4) & " " & TestArray(4, 4) |
// This example demonstrates using XSIUtils.Sort // with a JScript error. a = new Array( "C", "a", "Check", "Z", "zed" ) ; logmessage("before: a=[" + a + "]"); // This is identical to calling a.sort(); XSIUtils.QuickSort(a); logmessage("after: a=[" + a + "]"); //Expected output (notice that the sort has //been performed in a case-sensitive fashion) //INFO : after: a=[C,Check,Z,a,zed] |
// This example shows how better sort results // can be achieved by using the built-in JScript // array sorting algorithm. // //---------------------- // MySortFunction is a function provided to the // sort method to implement the comparison function. // // As documented in the JScript documentation this // method must return: // -A negative value if the first argument passed is less than the second argument. // -Zero if the two arguments are equivalent. // -A positive value if the first argument is greater than the second argument // // In this basic example the sort function can sort strings // or numbers but does not expect a mix of both types and // does not sort other types of data. //---------------------- function MySortFunction( a, b ) { if ( typeof( a ) == "string" ) { aLower = a.toLowerCase() ; bLower = b.toLowerCase() ; if ( aLower < bLower ) { return -1 ; } else if ( bLower < aLower ) { return 1 ; } return 0 ; } else if ( typeof( a ) == "number" ) { return a - b ; } else { throw( new Error( 0, "This function can only sort numbers and strings" ) ) ; } } // Demonstrate with strings testArray = new Array( "C", "a", "Check", "Z", "zed" ) ; testArray.sort( MySortFunction ) ; logmessage("after: testArray=[" + testArray + "]"); //Expected output //INFO : after: testArray=[a,C,Check,Z,zed] // Demonstrate with numbers testArray = new Array( 0.3, -1.9, 2, 1e10, 0 ) ; testArray.sort( MySortFunction ) ; logmessage("after: testArray=[" + testArray + "]"); //Expected output //INFO : after: testArray=[-1.9,0,0.3,2,10000000000] |