public Сomparison GetСomparison() { Сomparison comparison = (Сomparison)Session["Сomparison"]; if (comparison == null) { comparison = new Сomparison(); Session["Сomparison"] = comparison; } return(comparison); }
/// <summary> /// Выполняет сортировку слиянием /// </summary> /// <param name="strings">Исходный массив строк</param> /// <param name="left">Левый индекс сортируемого массива</param> /// <param name="right">Правый индекс сортируемого массива</param> /// <param name="compare">Метод, выполняющий сравнение строк</param> private static void MergeSort(string[] strings, int left, int right, Сomparison compare) { if (left < right) { int middle = (right + left) / 2; MergeSort(strings, left, middle, compare); MergeSort(strings, middle + 1, right, compare); Merge(strings, left, middle, right, compare); } }
public static void Main(string[] args) { var сomparisonDel = new Сomparison(СomparisonMethod); string[] strings = { "qwe", "qwert", "abc", "qwerty" }; Sort(strings, сomparisonDel, 0, strings.Length - 1); foreach (var str in strings) { Console.WriteLine(str); } Console.ReadKey(); }
public static void SortingOfInputWords() { var comparison = new Сomparison(Sorting.СomparisonMethod); string[] inputArray = Input.InputArray(); Console.WriteLine("\nYour words after sorting are:\n"); Sorting.Sort(inputArray, comparison, 0, inputArray.Length - 1); foreach (var string_ in inputArray) { Console.WriteLine(string_); } Console.WriteLine("\n"); }
public static void SortingOfFixedWords() { var comparison = new Сomparison(Sorting.СomparisonMethod); Console.WriteLine("\nOur fixed words are: "); foreach (string item in fixedArray) { Console.Write(item + " "); } Sorting.Sort(fixedArray, comparison, 0, fixedArray.Length - 1); Console.WriteLine("\nOur fixed words after sorting are:\n"); foreach (var string_ in fixedArray) { Console.WriteLine(string_); } }
private static void Merge(string[] strings, int left, int middle, int right, Сomparison compare) { int positionLeft = left; int positionRight = middle + 1; int sizeTmp = right - left + 1; var tmp = new string[sizeTmp]; int positionTmp = 0; while (positionLeft <= middle && positionRight <= right) { if (compare(strings[positionLeft], strings[positionRight])) { tmp[positionTmp] = strings[positionLeft]; positionLeft++; positionTmp++; } else { tmp[positionTmp] = strings[positionRight]; positionRight++; positionTmp++; } } while (positionLeft <= middle) { tmp[positionTmp] = strings[positionLeft]; positionLeft++; positionTmp++; } while (positionRight <= right) { tmp[positionTmp] = strings[positionRight]; positionRight++; positionTmp++; } for (var i = 0; i < sizeTmp; i++) { strings[left + i] = tmp[i]; } }
public static void Sort(string[] strings, Сomparison del, int first, int last) // заменил на быструю сортировку { int f = first, l = last; var mid = strings[(f + l) / 2]; do { while (del(strings[f], mid)) { f++; } while (del(mid, strings[l])) { l--; } if (f <= l) { var count = strings[f]; strings[f] = strings[l]; strings[l] = count; f++; l--; } }while (f < l); if (first < l) { Sort(strings, del, first, l); } if (f < last) { Sort(strings, del, f, last); } }
/// <summary> /// Сортирует массив строк с помощью указанного метода compare /// </summary> /// <param name="strings">Исходный массив строк</param> /// <param name="compare">Метод, выполняющий сравнение строк</param> public static void Sort(string[] strings, Сomparison compare) { MergeSort(strings, 0, strings.Length - 1, compare); }