挿入ソート

Namespace: fvalgcli
Assembly: fvalgcli (in fvalgcli.dll) Version: 3.1.0.0 (3.1.0.11)

Syntax

C#
public static void fnFIE_insort(
	IntPtr pvbase,
	SIZE_T num,
	SIZE_T size,
	CompareDelegate comp
)
Visual Basic
Public Shared Sub fnFIE_insort ( 
	pvbase As IntPtr,
	num As SIZE_T,
	size As SIZE_T,
	comp As CompareDelegate
)

Parameters

pvbase
Type: System..::..IntPtr
並べ替える配列の先頭
num
Type: fvalgcli..::..SIZE_T
配列の要素数
size
Type: fvalgcli..::..SIZE_T
配列の要素のサイズ
comp
Type: fvalgcli..::..CompareDelegate
比較関数

Examples

C# Copy imageCopy
//    $Revision: 1.1 $

using System;
using System.Collections.Generic;
using System.Text;
using fvalgcli;

namespace TC
{
    public partial class FIE
    {
        [FvPluginExecute]
        public void fnFIE_insort()
        {
            DPNT_T_PTR points = DPNT_T_PTR.Zero;
            int num = 5;

            try
            {
                // 比較対象の配列.
                points = DPNT_T_PTR.alloc(num);

                points[0] = DPNT_T.init(1, 9);
                points[1] = DPNT_T.init(3, 5);
                points[2] = DPNT_T.init(2, 3);
                points[3] = DPNT_T.init(5, 8);
                points[4] = DPNT_T.init(3, 3);

                // 比較関数.
                CompareDelegate comp = insort_comp;

                // 処理の実行.
                api.fnFIE_insort(points, num, DPNT_T_PTR.SizeOfItem, comp);

                for (int i = 0; i < num; i++)
                    Console.WriteLine("fnFIE_insort: points[{0}]={1},{2}", i, points[i].x, points[i].y);
            }
            finally
            {
                // オブジェクトの開放.
                points.Dispose();
            }
        }

        /// <summary>
        /// 配列要素の比較関数 (X順次いでY順)
        /// </summary>
        /// <param name="elem1">配列要素1</param>
        /// <param name="elem2">配列要素2</param>
        /// <returns>
        /// 返値は2つの要素の大小関係を表す値を返します。
        /// <0: elem1 は elem2 より小さい。
        /// =0: elem1 は elem2 と等しい。
        /// >0: elem1 は elem2 より大きい。
        /// </returns>
        private static int insort_comp(System.IntPtr elem1, System.IntPtr elem2)
        {
            DPNT_T _elem1 = ((DPNT_T_PTR)elem1)[0];
            DPNT_T _elem2 = ((DPNT_T_PTR)elem2)[0];

            if (_elem1.x < _elem2.x) return -1;
            if (_elem1.x > _elem2.x) return 1;

            if (_elem1.y < _elem2.y) return -1;
            if (_elem1.y > _elem2.y) return 1;

            return 0;
        }
    }
}


Visual Basic Copy imageCopy
'    $Revision: 1.1 $

Imports System.Collections.Generic
Imports System.Text
Imports fvalgcli

Public Partial Class FIE
    <FvPluginExecute> _
    Public Sub fnFIE_insort()
        Dim points As DPNT_T_PTR = DPNT_T_PTR.Zero
        Dim num As Integer = 5

        Try
            ' 比較対象の配列.
            points = DPNT_T_PTR.alloc(num)

            points(0) = DPNT_T.init(1, 9)
            points(1) = DPNT_T.init(3, 5)
            points(2) = DPNT_T.init(2, 3)
            points(3) = DPNT_T.init(5, 8)
            points(4) = DPNT_T.init(3, 3)

            ' 比較関数.
            Dim comp As CompareDelegate = AddressOf insort_comp

            ' 処理の実行.
            api.fnFIE_insort(points, num, DPNT_T_PTR.SizeOfItem, comp)

            For i As Integer = 0 To num - 1
                Console.WriteLine("fnFIE_insort: points[{0}]={1},{2}", i, points(i).x, points(i).y)
            Next
        Finally
            ' オブジェクトの開放.
            points.Dispose()
        End Try
    End Sub

    ''' <summary>
    ''' 配列要素の比較関数 (X順次いでY順)
    ''' </summary>
    ''' <param name="elem1">配列要素1</param>
    ''' <param name="elem2">配列要素2</param>
    ''' <returns>
    ''' 返値は2つの要素の大小関係を表す値を返します。
    ''' <0: elem1 は elem2 より小さい。
    ''' =0: elem1 は elem2 と等しい。
    ''' >0: elem1 は elem2 より大きい。
    ''' </returns>
    Private Shared Function insort_comp(elem1 As System.IntPtr, elem2 As System.IntPtr) As Integer
        Dim _elem1 As DPNT_T = CType(elem1, DPNT_T_PTR)(0)
        Dim _elem2 As DPNT_T = CType(elem2, DPNT_T_PTR)(0)

        If _elem1.x < _elem2.x Then
            Return -1
        End If
        If _elem1.x > _elem2.x Then
            Return 1
        End If

        If _elem1.y < _elem2.y Then
            Return -1
        End If
        If _elem1.y > _elem2.y Then
            Return 1
        End If

        Return 0
    End Function
End Class

See Also