示例#1
0
 /// <summary>
 /// 构造函数
 /// </summary>
 /// <param name="needtoexcute">把已经转化成数组形式的数据源传入执行条件筛选形成key数组</param>
 /// <param name="keyselector">条件筛选方法</param>
 /// <param name="next">比较器的下一个引用</param>
 /// <param name="comparer">这个sorter的比较器</param>
 public MyOrderThenBySorter(TMySource[] needtoexcute, 内置委托.Func <TMySource, TMyKey> keyselector, MyOrderThenBySorter <TMySource, TMyKey> next, 系统内置接口.IComparer <TMyKey> comparer)
 {
     this.needtoexcute = needtoexcute;
     this.keyselector  = keyselector;
     this.next         = next;
     this.comparer     = comparer;
 }
示例#2
0
 /// <summary>
 /// 快速排序
 /// </summary>
 /// <param name="_array">私有数组</param>
 /// <param name="start">开始位置</param>
 /// <param name="last">结束位置</param>
 /// <param name="comparer">比较器</param>
 public void QuickSort(T[] _array, int start, int last, 系统内置接口.IComparer <T> comparer)
 {
     //如果用户没有传入比较器,则调用默认的比较器
     if (comparer == null)
     {
         comparer = defaultComparer <T> .CreateComparer();
     }
     if (start < last)
     {
         int indexer = Devide(_array, start, last, comparer);
         QuickSort(_array, start, indexer - 1, comparer);
         QuickSort(_array, indexer + 1, last, comparer);
     }
 }
示例#3
0
        /// <summary>
        /// 分治法===以第一个元素作为比较标准
        /// </summary>
        /// <param name="_array">数组</param>
        /// <param name="start">开始位置</param>
        /// <param name="last">结束位置</param>
        /// <param name="comparer">比较器</param>
        /// <returns></returns>
        private int Devide(T[] _array, int start, int last, 系统内置接口.IComparer <T> comparer)
        {
            T   _temp    = default(T);
            T   standard = _array[start]; //比较标准--以数组的第一个元素作为标准
            int left     = start + 1;     //左侧开始位置
            int right    = last;          //右侧开始位置

            while (left < right)
            {
                //从右侧往左开始寻找小于标准数的元素
                while (left < right && comparer.Compare(_array[right], standard) == 1)
                {
                    right--;
                }
                //从左侧开始往右开始寻找大于标准数的元素
                while (left < right && comparer.Compare(_array[left], standard) == -1)
                {
                    left++;
                }
                //交换元素的位置
                if (left < right)
                {
                    Swap(_array, left, right);
                    //_temp = _array[left];
                    //_array[left] = _array[right];
                    _array[right] = _temp;
                }
            }
            //从左右两侧比较之后指向同一个元素
            _temp = standard;
            if (comparer.Compare(_temp, _array[left]) == -1)
            {
                Swap(_array, start, left - 1);
                //_array[start] = _array[left - 1];
                //_array[left - 1] = _temp;
                return(left - 1);
            }
            else
            {
                //else if (comparer.Compare(_temp, _array[left]) > 0)
                Swap(_array, start, left);
                //_array[start] = _array[left];
                //_array[left] = _temp;
                return(left);
            }
        }
示例#4
0
 /// <summary>
 /// 构造函数
 /// </summary>
 /// <param name="source"></param>
 /// <param name="keyselector"></param>
 public OrderThenBySequence(数据结构.IEnumerable <TSource> source, 内置委托.Func <TSource, TKey> keyselector, 系统内置接口.IComparer <TKey> comparer)
 {
     if (source == null)
     {
         throw new Exception("需要排序的数据源不能为空");
     }
     if (keyselector == null)
     {
         throw new Exception("需要排序的字段不能为空");
     }
     this.comparer    = comparer;
     this.source      = source;
     this.keyselector = keyselector;
     this.parent      = null;//如果是orderby那么就说明只需要创建一个序列,也就没有了父级序列
     //如果用户没有定义默认的比较器就使用系统默认的比较器
     if (this.comparer == null)
     {
         数据结构.Comparer <TKey> comparerclass = new Comparer <TKey>();
         this.comparer = comparerclass.Default;
     }
 }
示例#5
0
        public void Sort(int start, int last, 系统内置接口.IComparer <T> comparer)
        {
            SortHelper <T> sort = new SortHelper <T>(this._array);

            sort.QuickSort(_array, start, last, comparer);
        }
示例#6
0
 public void Sort(系统内置接口.IComparer <T> comparer)
 {
     this.Sort(0, this.Count - 1, comparer);
 }
示例#7
0
 /// <summary>
 ///当OrderBy之后进行ThenBy的序列的创建的时候调用的方法,接受必须进行OrderBy之后的参数(IOrderThenBy类型的参数)
 /// </summary>
 /// <param name="afterorderbysource">IOrderThenBy的数据类型</param>
 /// <param name="thenbyKeySelector">ThenBy需要执行的方法</param>
 /// <returns></returns>
 public 数据结构.OrderThenBySequence <TSource, TKey> CreateForThenBy(内置委托.Func <TSource, TKey> thenbyKeySelector, 系统内置接口.IComparer <TKey> comparer)
 {
     数据结构.OrderThenBySequence <TSource, TKey> thenbysource = new OrderThenBySequence <TSource, TKey>(source, thenbyKeySelector, comparer);
     thenbysource.parent = this;//this表示的当前的类,某个类的实例的对象.方法,那么在这个方法中的this就是这个 实例对象
     return(thenbysource);
 }