XSIUtils.QuickSort

説明

QuickSort を実行して配列を並べ替えます(多次元配列も可能)。ソートは各次元の最初のエレメントに対して実行されます。これらのエレメントが等しい場合は、2 番目のエレメントが比較されます。以下同様です。

BubbleSort、QuickSort、Insertion、Shaker、および Selection など、複数の並べ替えアルゴリズムがあります。大量のデータを効果的に並べ替えるには QuickSort アルゴリズムが最適です。QuickSort では、分割統治(divide-and-conquer)のアプローチが使用されます。

注:このメソッドは配列引数が Jscript 配列の時にビルドイン Jscript の並び替えメソッドと呼び出されます。JScript の並べ替えメソッドでは大文字/小文字が区別されるため、数値データを並べ替えるときに思うような結果にならない傾向があります。このワークグラウンドは以下の例文で例示します。

C#構文

XSIUtils.QuickSort( Object& io_Array );

スクリプト構文

XSIUtils.QuickSort( Array );

パラメータ

パラメータ タイプ 説明
Array Array ソートする配列です。

1. VBScript の例

'

' 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"

2. Python の例

#

# 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"

3. VBScript の例

'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)

4. JScript の例

// 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]

5. JScript の例

// 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]