QuickSort を実行して配列を並べ替えます(多次元配列も可能)。ソートは各次元の最初のエレメントに対して実行されます。これらのエレメントが等しい場合は、2 番目のエレメントが比較されます。以下同様です。
BubbleSort、QuickSort、Insertion、Shaker、および Selection など、複数の並べ替えアルゴリズムがあります。大量のデータを効果的に並べ替えるには QuickSort アルゴリズムが最適です。QuickSort では、分割統治(divide-and-conquer)のアプローチが使用されます。
注:このメソッドは配列引数が Jscript 配列の時にビルドイン Jscript の並び替えメソッドと呼び出されます。JScript の並べ替えメソッドでは大文字/小文字が区別されるため、数値データを並べ替えるときに思うような結果にならない傾向があります。このワークグラウンドは以下の例文で例示します。
XSIUtils.QuickSort( Object& io_Array ); |
XSIUtils.QuickSort( Array ); |
| パラメータ | タイプ | 説明 |
|---|---|---|
| Array | Array | ソートする配列です。 |
' ' 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] |