C#泛型快速排序算法

快速排序算法是我经常使用的算法,所以也写成了泛型了,省事,不用为每个类型去写个特定的算法了。

排序的对象是实现了IList接口的集合。

我已经发了一个查找类,经常都要一起使用的。

using  System;
using  System.Collections.Generic;
using  System.Text;
using  System.Data;
namespace  CommonLibrary
{
    
/// <summary>
    
/// Sorter 排序类
    
/// </summary>

    public class Sorter
    
{
        
/// <summary>
        
/// 两个值的比较委托
        
/// </summary>
        
/// <typeparam name="T">类型</typeparam>
        
/// <param name="value1">值1</param>
        
/// <param name="value2">值2</param>
        
/// <returns>返回值,值1大于值2返回1,值1小于值2返回-1,值1等于值2返回0</returns>

        public delegate int Compare<T>(T value1, T value2);

        
/// <summary>
        
/// 二分排序法
        
/// </summary>
        
/// <typeparam name="T">类型</typeparam>
        
/// <param name="myList">要进行排序的集合</param>
        
/// <param name="myCompareMethod">两个值的比较方法</param>

        public static void DimidiateSort<T>(IList<T> myList, Compare<T> myCompareMethod)
        
{
            DimidiateSort
<T>(myList, 0, myList.Count-1, myCompareMethod);
        }

        
/// <summary>
        
/// 二分排序法
        
/// </summary>
        
/// <typeparam name="T">类型</typeparam>
        
/// <param name="myList">要进行排序的集合</param>
        
/// <param name="left">起始位置</param>
        
/// <param name="right">结束位置</param>
        
/// <param name="myCompareMethod">两个值的比较方法</param>

        public static void DimidiateSort<T>(IList<T> myList, int left, int right, Compare<T> myCompareMethod)
        
{
            
if (left < right)
            
{
                T s 
= myList[(right + left) / 2];
                
int i = left - 1;
                
int j = right + 1;
                T temp 
= default(T);
                
while (true)
                
{
                    
do
                    
{
                        i
++;
                    }

                    
while (i < right && myCompareMethod(myList[i], s) == -1);
                    
do
                    
{
                        j
--;
                    }

                    
while (j > left && myCompareMethod(myList[j], s) == 1);
                    
if (i >= j)
                        
break;
                    temp 
= myList[i];
                    myList[i] 
= myList[j];
                    myList[j] 
= temp;
                }

                DimidiateSort(myList, left, i 
- 1, myCompareMethod);
                DimidiateSort(myList, j 
+ 1, right, myCompareMethod);
            }

        }

    }

}
 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值