用自己的算法实现对任意List的排序

要实现对任意List<T>对象的排序,首先要实现一个T元素的比较函数,可以声明一个委托:
     /// <summary>
    
/// 用于元素比较的委托
    
/// </summary>     

     public   delegate   int  Comparer < T > (T first, T second); 
 
然后就可设计排序函数了,排序的算法很多,这里用一种效率比较高的算法
public    static   void  Sort < T > (List < T >  list,  int  left,  int  right,Comparer < T >  Comparer)
        
{
            
int i, j;
            T middle;
            i 
= left;
            j 
= right;
            middle 
= list[(left + right) / 2]; //求中间值
            do
            
{
                
while ((Comparer(list[i],middle) > 0&& (i < right))//从左扫描小于中值的元素
                    i++;
                
while ((Comparer(list[j], middle) < 0&& (j > left))//从右扫描大于中值的元素
                    j--;
                
if (i <= j)//找到了一对值
                {
                    
//交换
                    T temp;
                    temp 
= list[i];
                    list[i] 
= list[j];
                    list[j] 
= temp;
                    i
++;
                    j
--;
                }

            }
 while (i <= j);//如果两边扫描的下标交错,就停止(完成一次)

            
//当左边部分有值(left<j),递归左半边
            if (left < j)
                Sort(list, left, j,Comparer);
            
//当右边部分有值(right>i),递归右半边
            if (right > i)
                Sort(list, i, right,Comparer);
        }

使用时只要自己实现 Comparer函数就可以了,

如:
         private   static   int  Comparer( int  first, int  second)
        
{
            
return  first-second;
        }

当然有些系统类本身就已经实现了
Comparer函数了,如string.Comparer()

调用例子:
             string  [] aaa  = "3""1""7""5""4""2""6" } ;
            List
< string   >  list = new  List < string > (aaa);
            Sort(list,
0 , 6 , string .Compare);
            
for  ( int  i  =   0 ; i  <   7 ; i ++ ) Console.WriteLine(list[i]);

大家如果有兴趣可以比较一下与List.Sort()排序的效率,呵呵

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值