private IEnumerable <int> RightSort() { wasSorted = false; int offset = 0; int offsetA = 0; for (int i = Array.Count - 1 - rightOffsetStart - leftCounter; i > 0 + rightOffsetEnd + rightCounter; i--) { offsetA++; if (Array[i] < Array[i - 1]) { offsetA = 0; wasSorted = true; int tmpVal = Array[i]; Array[i] = Array[i - 1]; Array[i - 1] = tmpVal; RelocateElements(i - 1, i); } if (!wasSorted) { offset++; } CompareElements(true, ElementColor.Build(i, Color.red), ElementColor.Build(i - 1, Color.red)); yield return(i); } rightCounter++; rightOffsetStart += offset - 1; rightOffsetEnd += offsetA; }
private IEnumerable <int> LeftSort() { wasSorted = false; int offset = 0; int offsetA = 0; for (int i = 0 + rightCounter + leftOffsetStart; i < Array.Count - 1 - leftOffsetEnd - leftCounter; i++) { offsetA++; if (Array[i] > Array[i + 1]) { offsetA = 0; wasSorted = true; int tmpVal = Array[i]; Array[i] = Array[i + 1]; Array[i + 1] = tmpVal; RelocateElements(i + 1, i); } if (!wasSorted) { offset++; } CompareElements(true, ElementColor.Build(i, Color.red), ElementColor.Build(i + 1, Color.red)); yield return(i); } leftCounter++; leftOffsetStart += offset - 1; leftOffsetEnd += offsetA; }
public override IEnumerable <int> Sort() { for (int i = 0; i < Array.Count; i++) { bool isSorted = true; for (int a = 0; a < Array.Count - i - 1; a++) { if (Array[a] > Array[a + 1]) { int tmp = Array[a]; Array[a] = Array[a + 1]; Array[a + 1] = tmp; RelocateElements(a, a + 1); isSorted = false; } CompareElements(true, ElementColor.Build(a, Color.red), ElementColor.Build(a + 1, Color.red)); yield return(i); } if (isSorted) { FinishSorting(); yield break; } } FinishSorting(); }
public override IEnumerable <int> Sort() { for (int i = 1; i < Array.Count; i++) { if (Array[i] >= Array[i - 1]) { continue; } CompareElements(true, ElementColor.Build(i, Color.green)); yield return(i); min = 0; max = i; while (min <= max) { int key = Array[i]; int mid = (min + max) / 2; CompareElements(true, ElementColor.Build(i, Color.green), ElementColor.Build(mid, Color.red)); yield return(i); if (mid == 0 && key <= Array[mid]) { ShiftArray(mid, i, Array); break; } if (key <= Array[mid + 1] && key >= Array[mid]) { ShiftArray(++mid, i, Array); break; } else if (key < Array[mid]) { max = mid - 1; } else { min = mid + 1; } } } FinishSorting(); }
private IEnumerable <int> SortChunk(int startIndex, int endIndex) { int median = GetMedianSimple(startIndex, endIndex); int rightOffset = 0; for (int i = startIndex; i < endIndex - rightOffset; i++) { CompareElements(true, ElementColor.Build(endIndex, Color.blue), ElementColor.Build(startIndex, Color.blue), ElementColor.Build(i, Color.green)); if (Array[i] >= median) { for (int a = endIndex - rightOffset; a > i; a--) { CompareElements(true, ElementColor.Build(i, Color.green), ElementColor.Build(a, Color.red), ElementColor.Build(endIndex, Color.blue), ElementColor.Build(startIndex, Color.blue)); rightOffset++; if (Array[a] < median) { SwapElements(i, a); //yield return a; break; } yield return(a); } } yield return(i); } }
public override IEnumerable <int> Sort() { for (int i = 1; i < Array.Count; i++) { if (Array[i] >= Array[i - 1]) { continue; } CompareElements(true, ElementColor.Build(i, Color.green), ElementColor.Build(i - 1, Color.red)); yield return(i); for (int a = i; a > 0; a--) { int b = a - 1; CompareElements(true, ElementColor.Build(i, Color.green), ElementColor.Build(b, Color.red)); yield return(a); if (Array[i] >= Array[b]) { ShiftArray(b + 1, i, Array); break; } else if (b == 0) { ShiftArray(b, i, Array); break; } } } FinishSorting(); }