/// <summary> /// 数组子串排序 /// </summary> /// <typeparam name="valueType">数据类型</typeparam> /// <param name="array">待排序数组子串</param> /// <param name="getKey">排序键</param> /// <param name="index">起始位置</param> /// <param name="count">数量</param> /// <returns>排序后的数组</returns> internal static valueType[] GetSortDesc <valueType>(valueType[] array, Func <valueType, ulong> getKey, int index, int count) { if (count >= AutoCSer.Algorithm.RadixSort.SortSize64) { int size = (count << 1) * sizeof(AutoCSer.Algorithm.ULongSortIndex); AutoCSer.Memory.UnmanagedPool pool = AutoCSer.Memory.UnmanagedPool.GetPool(size); AutoCSer.Memory.Pointer data = pool.GetMinSize(size); try { AutoCSer.Algorithm.ULongSortIndex *indexFixed = (AutoCSer.Algorithm.ULongSortIndex *)data.Data; AutoCSer.Algorithm.ULongSortIndex.Create(indexFixed, array, getKey, index, count); AutoCSer.Algorithm.RadixSort.SortDesc(indexFixed, indexFixed + count, count); return(AutoCSer.Algorithm.ULongSortIndex.Create(indexFixed, array, count)); } finally { pool.Push(ref data); } } return(AutoCSer.Algorithm.FixedArrayQuickSort.GetSortDesc(array, getKey, index, count)); }
/// <summary> /// 数组子串排序 /// </summary> /// <typeparam name="valueType">数据类型</typeparam> /// <param name="array">待排序数组子串</param> /// <param name="getKey">排序键</param> /// <param name="index">起始位置</param> /// <param name="count">数量</param> /// <returns>排序后的数组</returns> internal static valueType[] GetSort/*Compare[0]*//*Compare[0]*/ <valueType>(valueType[] array, Func <valueType, /*Type[0]*/ ulong /*Type[0]*/> getKey, int index, int count) { if (count >= AutoCSer.Algorithm.RadixSort.SortSize64) { int size = (count << 1) * sizeof(AutoCSer.Algorithm./*Type[1]*/ ULongSortIndex /*Type[1]*/); UnmanagedPool pool = AutoCSer.Algorithm.RadixSort.GetUnmanagedPool(size); Pointer.Size data = pool.GetSize(size); try { AutoCSer.Algorithm./*Type[1]*/ ULongSortIndex /*Type[1]*/ *indexFixed = (AutoCSer.Algorithm./*Type[1]*/ ULongSortIndex /*Type[1]*/ *)data.Data; AutoCSer.Algorithm./*Type[1]*/ ULongSortIndex /*Type[1]*/.Create(indexFixed, array, getKey, index, count); AutoCSer.Algorithm.RadixSort.Sort/*Compare[0]*//*Compare[0]*/ (indexFixed, indexFixed + count, count); return(AutoCSer.Algorithm./*Type[1]*/ ULongSortIndex /*Type[1]*/.Create(indexFixed, array, count)); } finally { pool.PushOnly(ref data); } } return(AutoCSer.Algorithm.FixedArrayQuickSort.GetSort/*Compare[0]*//*Compare[0]*/ (array, getKey, index, count)); }