データ全体をソートします。
定義
void Jiro_Ary_QuickSort( JIRO_ARY_HDL inAryHdl,
int (__cdecl *compare_proc)(const void * inRec1Ptr, const void * inRec2Ptr) );
戻り値
戻り値はありません。
引数
- inAryHdl
操作対象となる動的配列のハンドルを指定します。 - compare_proc
ソートに用いる比較関数を指定します。
解説
この関数は動的配列に格納された要素についてANSI Cのqsortと同じ処理を行います。
プログラム例
プログラムソース
#include <stdio.h>
#include “Jirowin.h”
// Jiro_Ary に格納するデータ構造
struct IMAGINARY_NUMBER
{
long real;
long imag;
};
// ソート用比較関数
int mySortFunc( const void * inNum1, const void * inNum2 )
{
IMAGINARY_NUMBER num1 = *(IMAGINARY_NUMBER*)inNum1;
IMAGINARY_NUMBER num2 = *(IMAGINARY_NUMBER*)inNum2;
// 実数が小さい順に並べる。ただし実数値が同じ場合は虚数値が小さい方を前とする。
if( num1.real == num2.real )
{
if( num1.imag < num2.imag )
{
return -1;
}
}
if( num1.real < num2.real )
{
return -1;
}
return 1;
}
// メイン関数
void main( void )
{
long i;
long recordCount;
IMAGINARY_NUMBER inum;
JIRO_ARY_HDL aryHdl;
// 生成
aryHdl = Jiro_Ary_Init( sizeof(IMAGINARY_NUMBER), 10, 5 );
// 3+i を追加
inum.real = 3;
inum.imag = 1;
Jiro_Ary_Add( aryHdl, &inum );
// 2+3i を追加
inum.real = 2;
inum.imag = 3;
Jiro_Ary_Add( aryHdl, &inum );
// 0+2i を追加
inum.real = 0;
inum.imag = 2;
Jiro_Ary_Add( aryHdl, &inum );
// 2+4i を追加
inum.real = 2;
inum.imag = 4;
Jiro_Ary_Add( aryHdl, &inum );
// 2+2i を追加
inum.real = 2;
inum.imag = 2;
Jiro_Ary_Add( aryHdl, &inum );
// 2+1i を追加
inum.real = 2;
inum.imag = 1;
Jiro_Ary_Add( aryHdl, &inum );
// データを表示
printf(“before sorting…\n”);
recordCount = Jiro_Ary_GetSize( aryHdl );
for( i=0; i<recordCount; i++ )
{
Jiro_Ary_GetData( aryHdl, i, &inum );
printf( “%d+%di\n”, inum.real, inum.imag );
}
// ソート
Jiro_Ary_QuickSort( aryHdl, mySortFunc );
// データを表示
printf(“after sorting…\n”);
recordCount = Jiro_Ary_GetSize( aryHdl );
for( i=0; i<recordCount; i++ )
{
Jiro_Ary_GetData( aryHdl, i, &inum );
printf( “%d+%di\n”, inum.real, inum.imag );
}
// 解放
Jiro_Ary_Free( aryHdl );
}
出力
before sorting…
3+1i
2+3i
0+2i
2+4i
2+2i
2+1i
after sorting…
0+2i
2+1i
2+2i
2+3i
2+4i
3+1i