好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

C#设计模式 排序算法与委托结合运用

周六还要上班,闲来无事,写了一段调用排序算法的类,利用委拖来实现比较,可扩展性比较强。

排序类如下:

代码

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

namespace  SortMethod
{
     // 主要用来调用比较两个对象的方法
     public   delegate   bool  Comparison( object  a, object  b);
     public   class  Sort
    {
         ///   <summary>
         ///  冒泡排序算法
         ///   </summary>
         ///   <param name="s"></param>
         ///   <param name="cp"></param>
         public   static   void  BubbleSort( object [] list, Comparison cp)
        {
             for  ( int  i  =   0 ; i  <  list.Length; i ++ )
            {
                 for  ( int  j  =  i  +   1 ; j  <  list.Length; j ++ )
                {
                     if  (cp(list[i], list[j]))
                    {
                         object  rs  =  list[i];
                        list[i]  =  list[j];
                        list[j]  =  rs;
                    }
                }
            }
        }
         ///   <summary>
         ///  选择排序算法
         ///   </summary>
         ///   <param name="s"></param>
         ///   <param name="cp"></param>
         public   static   void  SelectSort( object [] list, Comparison cp)
        {
             int  min;
             for  ( int  i  =   0 ; i  <  list.Length; i ++ )
            {
                min  =  i;
                 for  ( int  j  =  i  +   1 ; j  <  list.Length; j ++ )
                {
                     if  (cp(list[min], list[j]))
                    {
                        min  =  j;
                    }
                }
                 object  rs  =  list[i];
                list[i]  =  list[min];
                list[min]  =  rs;
            }
        }

         ///   <summary>
         ///  插入排序算法
         ///   </summary>
         ///   <param name="s"></param>
         ///   <param name="cp"></param>
         public   static   void  InsertSort( object [] list, Comparison cp)
        {
             for  ( int  i  =   1 ; i  <  list.Length; i ++ )
            {
                 object  t  =  list[i];
                 int  j  =  i;
                 while  ((j  >   0 )  &&  cp(t, list[j  -   1 ]))
                {
                    list[j]  =  list[j  -   1 ];
                     -- j;
                }
                list[j]  =  t;
            }
        }
         ///   <summary>
         ///  希尔排序算法
         ///   </summary>
         ///   <param name="s"></param>
         ///   <param name="cp"></param>
         public   static   void  ShellSort( object [] list, Comparison cp)
        {
             int  inc;
             for  (inc  =   1 ; inc  <=  list.Length  /   9 ; inc  =   3   *  inc  +   1 ) ;
             for  (; inc  >   0 ; inc  /=   3 )
            {
                 for  ( int  i  =  inc  +   1 ; i  <=  list.Length; i  +=  inc)
                {
                     object  t  =  list[i  -   1 ];
                     int  j  =  i;
                     while  ((j  >  inc)  &&  cp(t,list[j  -  inc  -   1 ]))
                    {
                        list[j  -   1 ]  =  list[j  -  inc  -   1 ];
                        j  -=  inc;
                    }
                    list[j  -   1 ]  =  t;
                }
            }
        }

    }
}

调用类进行排序

代码


protected   void  Button1_Click( object  sender, EventArgs e)
        {
             // 通过委托调用方法
            SortMethod.Comparison com  =   new  SortMethod.Comparison(Comp);           
             string [] str  =  TextBox1.Text.Trim().Split( ' , ' );
             // 进行排序
            SortMethod.Sort.BubbleSort(str,com);
             // 输出
            Label1.Text  =   "" ;
             for  ( int  i  =   0 ; i  <  str.Length; i ++ )
            {
                Label1.Text  +=  str[i].ToString()  +   " , " ;
            }
        }
         // 比较方法,这里可以自己定义
         public   bool  Comp( object  a,  object  b)
        {
             return  Convert.ToInt32(a)  <  Convert.ToInt32(b);
        }

 

 

查看更多关于C#设计模式 排序算法与委托结合运用的详细内容...

  阅读:42次