Jiro_Ary_QuickSort

データ全体をソートします。

定義

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

参照