private void Sort(T[] items, ISortOperator <T> sortOperator, int currentIndex, int maxLength = -1) { maxLength = maxLength == -1 ? items.Length : maxLength; for (int i = currentIndex, maxIndex = i; currentIndex < maxLength; i = maxIndex) { var leftIndex = GetLeftIndex(i); var rightIndex = GetRightIndex(i); if (leftIndex < maxLength && sortOperator.Compare(items, leftIndex, maxIndex) == 1) { maxIndex = leftIndex; } if (rightIndex < maxLength && sortOperator.Compare(items, rightIndex, maxIndex) == 1) { maxIndex = rightIndex; } if (i == maxIndex) { return; } sortOperator.Swap(items, i, maxIndex); } }
private static int Split(T[] items, ISortOperator <T> sortOperator, int left, int right) { var pointer = left; for (var i = left; i <= right; i++) { if (sortOperator.Compare(items[i], items[right]) == -1) { sortOperator.Swap(items, i, pointer++); } } sortOperator.Swap(items, pointer, right); return(pointer); }
public void Sort(T[] items, ISortOperator <T> sortOperator) { while (!items.IsSorted()) { for (var i = 0; i < items.Length; i++) { sortOperator.Swap(items, 0, Random.Next(0, items.Length)); } } }
public void Sort(T[] items, ISortOperator <T> sortOperator) { var length = items.Length - 1; for (var i = 0; i < length; i++) { while (i >= 0 && sortOperator.Compare(items, i, i + 1) == 1) { sortOperator.Swap(items, i, i + 1); i--; } } }
public void Sort(T[] items, ISortOperator <T> sortOperator) { var isDone = false; var left = 0; var right = items.Length - 1; while (!isDone) { isDone = true; for (var i = left; i < right; i++) { if (sortOperator.Compare(items, i, i + 1) == 1) { sortOperator.Swap(items, i, i + 1); isDone = false; } } if (isDone) { return; } right--; for (var i = right; i > left; i--) { if (sortOperator.Compare(items, i, i - 1) == -1) { sortOperator.Swap(items, i, i - 1); isDone = false; } } left++; } }
public void Sort(T[] items, ISortOperator <T> sortOperator) { var count = 0; for (var i = items.Length; i >= 0; i--) { Sort(items, sortOperator, i); count++; } for (var i = count - 1; i >= 0; i--) { sortOperator.Swap(items, 0, i); Sort(items, sortOperator, 0, i); } }
public void Sort(T[] items, ISortOperator <T> sortOperator) { for (var i = 0; i < items.Length - 1; i++) { var minIndex = i; for (var j = i; j < items.Length; j++) { if (sortOperator.Compare(items, j, minIndex) == -1) { minIndex = j; } } sortOperator.Swap(items, i, minIndex); } }
public void Sort(T[] items, ISortOperator <T> sortOperator) { for (var i = 1; i < items.Length; i++) { for (var j = i; j > 0; j--) { if (sortOperator.Compare(items, j, j - 1) == -1) { sortOperator.Swap(items, j, j - 1); } else { break; } } } }
public void Sort(T[] items, ISortOperator <T> sortOperator) { var isDone = false; var length = items.Length - 1; while (!isDone) { isDone = true; for (var i = 0; i < length; i++) { if (sortOperator.Compare(items, i, i + 1) == 1) { sortOperator.Swap(items, i, i + 1); isDone = false; } } length--; } }
public void Sort(T[] items, ISortOperator <T> sortOperator) { var step = items.Length; while ((step /= 2) > 0) { for (var i = step; i < items.Length; i++) { for (var j = i; j >= step; j -= step) { if (sortOperator.Compare(items, j, j - step) == -1) { sortOperator.Swap(items, j, j - step); } else { break; } } } } }