2008. 6. 15. 13:49

Strategy 패턴 소스 (셀 정렬 알고리즘 포함)

import java.util.Comparator;


public class Sorters
{
 /** 셀 정렬 구현. */
  public static void shellSort(Object[] base, Comparator compareStrategy)
  {
    int i, j;
    int gap;
    Object p1, p2;

    for(gap=1; gap <= base.length; gap = 3*gap + 1)
      ;

    for( gap /= 3; gap > 0 ; gap /= 3)
      for( i = gap; i < base.length; i++ )
        for( j = i-gap; j >= 0 ; j -= gap )
        {
          if( compareStrategy.compare( base[j], base[j+gap] ) <= 0)
            break;

          Object t = base[j];
          base[j] = base[j+gap];
          base[j+gap] = t;
        }
  }

  // ...

  public static void main( String[] args )
  {
    String array[] = { "b", "d", "e", "a", "e" };
    Sorters.shellSort(
      array,
      new Comparator()
      {
        public int compare( Object o1, Object o2 )
        {
          // 역방향으로 정렬
          return -( ((String)o1).compareTo((String)o2) );
        }
      }
   );

   for ( int i=0; i < array.length; ++i )
     System.out.println( array[i] );
  }
}