SIL.Utils.MergeSort.InternalSort C# (CSharp) Method

InternalSort() protected method

The actual implementation
protected InternalSort ( Array &primary, int left, int right, System compare ) : void
primary System.Array
left int
right int
compare System
return void
		protected void InternalSort(
		ref Array primary,
		int left,
		int right,
		System.Collections.IComparer compare)
		{
			if (secondary == null || secondary.Length != primary.Length)
				secondary = (Array)primary.Clone();

			if (right > left)
			{
				int middle = (left + right) / 2;
				InternalSort(ref primary, left, middle, compare);
				InternalSort(ref primary, middle + 1, right, compare);

				int i, j, k;
				for (i = middle + 1; i > left; i--)
					secondary.SetValue(primary.GetValue(i - 1), i - 1);
				for (j = middle; j < right; j++)
					secondary.SetValue(primary.GetValue(j + 1), right + middle - j);
				for (k = left; k <= right; k++)
					primary.SetValue(
					(compare.Compare(secondary.GetValue(i), secondary.GetValue(j)) < 0) ?
					secondary.GetValue(i++) :
					secondary.GetValue(j--), k);
			}
		}

Same methods

MergeSort::InternalSort ( System &primary, int left, int right, System compare ) : void

Usage Example

示例#1
0
		/// <summary>
		/// Sort an ArrayList using the specified comparer
		/// </summary>
		/// <param name="array">ArrayList to sort</param>
		/// <param name="compare">Comparer to used for sorting</param>
		public static void Sort(ref System.Collections.ArrayList array, System.Collections.IComparer compare)
		{
			using (MergeSort mergeSort = new MergeSort())
			{
				mergeSort.InternalSort(ref array, 0, array.Count - 1, compare);
			}
		}
All Usage Examples Of SIL.Utils.MergeSort::InternalSort