public static SeparatedLine[] OrderBy(SeparatedLine[] input)
        {
            var array = new SeparatedLine[input.Length];

            Array.Copy(input, array, input.Length);
            return(array.OrderBy(x => x).ToArray());
        }
        //метод обмена элементов
        private static void Swap(ref SeparatedLine e1, ref SeparatedLine e2)
        {
            var tmp = e1;

            e1 = e2;
            e2 = tmp;
        }
        //Сортировка Шелла
        public static SeparatedLine[] ShellSort(SeparatedLine[] input)
        {
            var array = new SeparatedLine[input.Length];

            Array.Copy(input, array, input.Length);
            //расстояние между элементами, которые сравниваются
            var d = array.Length / 2;

            while (d >= 1)
            {
                for (var i = d; i < array.Length; i++)
                {
                    var j = i;
                    while (j >= d && array[j - d] > array[j])
                    {
                        Swap(ref array[j], ref array[j - d]);
                        j -= d;
                    }
                }

                d /= 2;
            }

            return(array);
        }
 public void Test_ConvertingToString(SeparatedLine input, string result)
 {
     //checks ToString
     Assert.True(input.ToString() == result);
     //checks explicit converter
     Assert.True((string)input == result);
 }
        //TODO: Windows && Linux Winner
        public static SeparatedLine[] QuickSort(SeparatedLine[] input)
        {
            var array = new SeparatedLine[input.Length];

            Array.Copy(input, array, input.Length);
            QuickSortIterative(array, 0, input.Length - 1);
            return(array);
        }
        public static SeparatedLine[] Sort(SeparatedLine[] input)
        {
            var array = new SeparatedLine[input.Length];

            Array.Copy(input, array, input.Length);
            Array.Sort(array);
            return(array);
        }
        public void Test_FromStringToSeparatedLine(string result)
        {
            var split  = result.Split(". ");
            var spLine = new SeparatedLine {
                Number = int.Parse(split[0]), Text = split[1]
            };

            Assert.True(result.GetSeparatedLine() == spLine);
        }
        //сортировка пузырьком
        public static SeparatedLine[] BubbleSort(SeparatedLine[] input)
        {
            var array = new SeparatedLine[input.Length];

            Array.Copy(input, array, input.Length);
            var len = array.Length;

            for (var i = 1; i < len; i++)
            {
                for (var j = 0; j < len - i; j++)
                {
                    if (array[j] > array[j + 1])
                    {
                        Swap(ref array[j], ref array[j + 1]);
                    }
                }
            }

            return(array);
        }
        //сортировка вставками
        public static SeparatedLine[] InsertionSort(SeparatedLine[] input)
        {
            var array = new SeparatedLine[input.Length];

            Array.Copy(input, array, input.Length);

            for (var i = 0; i < array.Length - 1; i++)
            {
                for (var j = i + 1; j > 0; j--)
                {
                    if (array[j - 1] > array[j])
                    {
                        var temp = array[j - 1];
                        array[j - 1] = array[j];
                        array[j]     = temp;
                    }
                }
            }

            return(array);
        }
Esempio n. 10
0
 private static IEnumerable <string> FetchData(Random rnd, IReadOnlyDictionary <int, char[]> dictionary,
                                               int count, int newLineSize)
 {
     //var sb = new StringBuilder();
     //slower for 1Gb file: ~14.6s for StringBuilder, string line by line - ~14.06s
     //var newLine = $"{rnd.Next(0, int.MaxValue)}. {new string(dictionary[rnd.Next(0, count)])}";
     //allocates ~3Gb (but less, than SB - ~4Gb)
     //even with buffer
     //Encoding.ASCII.GetByteCount(newLine) - slower than newLine.Length
     //We'll assume that in dictionaries we will be within ASCII symbols (in ASCII 1 char == 1 byte)
     while (_resultFileSize > 0)
     {
         //for 1Gb file: 9.422s with that, allocates ~3Gb, but faster because of operations on stack
         var separatedLine = new SeparatedLine
         {
             Number = rnd.Next(0, int.MaxValue), Text = dictionary[rnd.Next(0, count)]
         };
         _resultFileSize -= newLineSize + separatedLine.GetLength();
         yield return(separatedLine.ToString());
     }
 }
        //сортировка перемешиванием
        public static SeparatedLine[] ShakerSort(SeparatedLine[] input)
        {
            var array = new SeparatedLine[input.Length];

            Array.Copy(input, array, input.Length);
            for (var i = 0; i < array.Length / 2; i++)
            {
                var swapFlag = false;
                //проход слева направо
                for (var j = i; j < array.Length - i - 1; j++)
                {
                    if (array[j] > array[j + 1])
                    {
                        Swap(ref array[j], ref array[j + 1]);
                        swapFlag = true;
                    }
                }

                //проход справа налево
                for (var j = array.Length - 2 - i; j > i; j--)
                {
                    if (array[j - 1] > array[j])
                    {
                        Swap(ref array[j - 1], ref array[j]);
                        swapFlag = true;
                    }
                }

                //если обменов не было выходим
                if (!swapFlag)
                {
                    break;
                }
            }

            return(array);
        }