Beispiel #1
0
        private static (BinaryTree, SortRes) CreateTreeForSort(double[] array)
        {
            SortRes sortRes = new SortRes();


            BinaryTree treeStart = new BinaryTree(array[0]);

            sortRes.numberOfMove++; //Перемещение элемента в предыдущей строке

            BinaryTree forCycle = treeStart;

            //Цикл сортировки по дереву
            for (int i = 1; i < array.Length; i++)
            {
                sortRes.numberOfCompare++;  //Сравнение в следующей строке
                if (array[i] < forCycle.Item)
                {
                    sortRes.numberOfCompare++;  //Сравнение в следующей строке
                    if (forCycle.Left == null)
                    {
                        forCycle.Left = new BinaryTree(array[i]);
                        sortRes.numberOfMove++; //Перемещение элемента в предыдущей строке
                        forCycle = treeStart;
                    }
                    else
                    {
                        forCycle = forCycle.Left;
                        i--;
                    }
                }
                else
                {
                    sortRes.numberOfCompare++;  //Сравнение в следующей строке
                    if (forCycle.Right == null)
                    {
                        forCycle.Right = new BinaryTree(array[i]);
                        sortRes.numberOfMove++; //Перемещение элемента в предыдущей строке
                        forCycle = treeStart;
                    }
                    else
                    {
                        forCycle = forCycle.Right;
                        i--;
                    }
                }
            }

            return(treeStart, sortRes);
        }
Beispiel #2
0
        public static SortRes SortOfMixing(double[] array)
        {
            if (array.Length == 0)
            {
                throw new ArgumentException("Массив не может быть пустым");
            }

            int left        = 0,
                right       = array.Length - 1;
            SortRes sortRes = new SortRes();

            while (left < right)
            {
                for (int i = left; i < right; i++)
                {
                    sortRes.numberOfCompare++;
                    if (array[i] > array[i + 1])
                    {
                        sortRes.numberOfMove++;
                        double dop = array[i];
                        sortRes.numberOfMove++;
                        array[i] = array[i + 1];
                        sortRes.numberOfMove++;
                        array[i + 1] = dop;
                    }
                }
                right--;
                for (int i = right; i > left; i--)
                {
                    sortRes.numberOfCompare++;
                    if (array[i] < array[i - 1])
                    {
                        sortRes.numberOfMove++;
                        double dop = array[i];
                        sortRes.numberOfMove++;
                        array[i] = array[i - 1];
                        sortRes.numberOfMove++;
                        array[i - 1] = dop;
                    }
                }
                left++;
            }

            sortRes.arraySorted = array;

            return(sortRes);
        }
Beispiel #3
0
        public static SortRes SortOfBinarryTree(double[] array)
        {
            if (array.Length == 0)
            {
                throw new ArgumentException("Массив не может быть пустым");
            }

            (BinaryTree, SortRes)dopPer = CreateTreeForSort(array);
            BinaryTree binaryTree = dopPer.Item1;
            SortRes    sortRes    = dopPer.Item2;

            List <double> sortArray = new List <double>();

            BinaryTreeToSortArray(binaryTree, sortArray, sortRes);

            sortRes.arraySorted = sortArray.ToArray();

            return(sortRes);
        }
Beispiel #4
0
 /// <summary>
 /// Превращает бинарное дерево сортировки в отсорттированный массив
 /// </summary>
 /// <param name="tree">Дерево сортировки</param>
 /// <param name="array">В начале необходимо подать пустой лист, который и будет результатом</param>
 ///  /// <param name="sortRes">Сюда будут записываться количество перемещений</param>
 /// <returns></returns>
 private static void BinaryTreeToSortArray(BinaryTree tree, List <double> array, SortRes sortRes)
 {
     if (tree != null)
     {
         BinaryTreeToSortArray(tree.Left, array, sortRes);
         array.Add(tree.Item);
         sortRes.numberOfMove++; //Перемещение элемента в предыдущей строке
         BinaryTreeToSortArray(tree.Right, array, sortRes);
     }
 }
Beispiel #5
0
 public InfoSort(SortRes SortOfBinaryTree, SortRes SortOfMixing)
 {
     this.SortOfBinaryTree = SortOfBinaryTree;
     this.SortOfMixing     = SortOfMixing;
 }