본문 바로가기

[ programing ]/C#

버블정렬( BubbleSort) C# / 델리게이트 활용 (delegate) / 오름차순


using System;




delegate int SortCompare(int a, int b);



class MainApp

{


        static void BubbleSort(int[] DataArray, SortCompare sortCompare)

 {



   int i=0;

   int j=0;

   int temp = 0; 


   for ( i = 0; i< DataArray.Length -1; i++)

   {

  for( j =0; j<DataArray.Lenth - ( i + 1); j++)


if( sortCompare(DataArray[j], DataArray[ j + 1] > 0 )

{

   temp = DataArray[ j + 1 ];

   DataArray[ j + 1 ] = DataArray[ j ];

   DataArray[ j ] = temp;

}

   }


  }



 }







static void Main(string[] args)

{

   int[] array = { 2,5,3,4,10};


   BubbleSort( array, delete( int a, int b)

                                 {

if( a>b)

   return 1;

else if( a== b)

  return 0;

else

  return -1;

          });



}

}





_______________________________________________________________________________








* 한정자 delegate 반환형식 델리게이트이름 ( 매개변수 );

       delegate int MeDelgate( int a, int b);





델리게이트는 메소드를 참조하며 값이 아닌 코드를 매개변수로 넘기고 싶을때 사용합니다.

델리게이트로 참조할 메서드는 델리게이트에 선언된 반환형식과 매개변수가 같아야 합니다.



위의 코드에서 Main메서드에서 


BubbleSort( array, delete( int a, int b)

                                 {

if( a>b)

   return 1;


else if( a== b)

  return 0;


else

  return -1;

          });



}



을 호출하면 BubbleSort 메서드가 호출됩니다.





ⓐ BubbleSort 메서드는 메서드 인자로 배열델리게이트 를 받고 있습니다. (위의 델리게이트의 반환값가 메서드인자가 일치합니다.)

  BubbleSort 를 호출하면 BubbleSort 메서드안의 델리게이트가 실행됩니다.



if( SortCompare(DataArray[j], DataArray[ j + 1] > 0 ) // 델리게이트

{

   temp = DataArray[ j + 1 ];

   DataArray[ j + 1 ] = DataArray[ j ];

   DataArray[ j ] = temp;

}



ⓑ 위의 코드중 SortCompare( DataArray[j], DataArray[ j + 1] ) 이 구문이 실행 될때 



delete( int a, int b)

                 {

if( a>b)

   return 1;


else if( a== b)

  return 0;


else

  return -1;

                  });



위의 델리게이트가 참조하고 있는 메서드가 실행되어

리턴값으로 1,0,-1 을 줍니다.



  if 문은 리턴값이 0보다 클경우 



   temp = DataArray[ j + 1 ];

   DataArray[ j + 1 ] = DataArray[ j ];

   DataArray[ j ] = temp;



이 구문을 실행하여 오름차순 배열로 정렬해 줍니다.