// TODO: Transfer to unit tests private static void Check(Element[] elements) { // 1. Проверка за наредба във възходящ ре for (int i = 0; i < elements.Length - 1; i++) { Debug.Assert(elements[i].Key <= elements[i + 1].Key, "Wrong order"); } // 2. Проверка за пермутация на изходните елементи bool[] found = new bool[elements.Length]; for (int i = 0; i < elements.Length; i++) { for (int j = 0; j < elements.Length; j++) { if (!found[j] && elements[i].Key == elements[j].Key) { found[j] = true; break; } // Пропада, ако не е намерен съответен Debug.Assert(j < elements.Length, "No element found"); } } }
// Запълва масива със случайни цели числа private static void Init(Element[] elements) { for (int i = 0; i < elements.Length; i++) { int key = Random.Next() % elements.Length; elements[i] = new Element() { Key = key }; } }
// Извежда ключовете на масива на екрана private static void Print(Element[] elements) { for (int i = 0; i < elements.Length; i++) { Console.Write("{0} ", elements[i].Key); } Console.WriteLine(); }
internal static void Main() { Console.OutputEncoding = Encoding.UTF8; Element[] elements = new Element[Max]; for (int i = 1; i <= TestLoopCount; i++) { Console.WriteLine("{0}<<<<< Тест {1} >>>>>", Environment.NewLine, i); Init(elements); Console.WriteLine("Масивът преди сортирането:"); Print(elements); StraightSelection(elements); Console.WriteLine("Масивът след сортирането:"); Print(elements); Check(elements); } }
private static void StraightSelection(Element[] elements) { for (int i = 0; i < elements.Length - 1; i++) { for (int j = i + 1; j < elements.Length; j++) { if (elements[i].Key > elements[j].Key) { Swap(elements[i], elements[j]); Element old = elements[i]; elements[i] = elements[j]; elements[j] = old; } } } }
private static void Swap(Element e1, Element e2) { Element old = e1; e1 = e2; e2 = old; }