private void InsertSort()
 {
     for (int i = 1; i < arr.Count; i++)
     {
         int  j    = i;
         Part temp = new Part(arr[i]);
         DemoQueue.Enqueue(new Movement(activityType.MOVE, arr[i].index, 0, 2, false));
         while (j > 0)
         {
             if (temp.num < arr[j - 1].num)
             {
                 DemoQueue.Enqueue(new Movement(activityType.MOVE, temp.index, -1, 0, true));;
                 DemoQueue.Enqueue(new Movement(activityType.MOVE, arr[j - 1].index, 1, 0, false));
                 arr[j].Assign(arr[j - 1]);
             }
             else
             {
                 break;
             }
             j--;
         }
         DemoQueue.Enqueue(new Movement(activityType.MOVE, temp.index, 0, -2, false));
         arr[j].Assign(temp);
     }
 }
Esempio n. 2
0
 private void BubbleSort()
 {
     for (int i = 0; i < arr.Count; i++)
     {
         for (int j = 0; j < arr.Count - i - 1; j++)
         {
             DemoQueue.Enqueue(new Movement(activityType.MOVE, arr[j].index, 0, 2, true));;
             DemoQueue.Enqueue(new Movement(activityType.MOVE, arr[j + 1].index, 0, 2, false));;
             if (arr[j].num > arr[j + 1].num)
             {
                 DemoQueue.Enqueue(new Movement(activityType.MOVE, arr[j].index, 1, 0, true));
                 DemoQueue.Enqueue(new Movement(activityType.MOVE, arr[j + 1].index, -1, 0, false));
                 DemoQueue.Enqueue(new Movement(activityType.MOVE, arr[j].index, 0, -2, true));
                 DemoQueue.Enqueue(new Movement(activityType.MOVE, arr[j + 1].index, 0, -2, false));
                 arr[j].Swap(arr[j + 1]);
             }
             else
             {
                 DemoQueue.Enqueue(new Movement(activityType.MOVE, arr[j].index, 0, -2, true));;
                 DemoQueue.Enqueue(new Movement(activityType.MOVE, arr[j + 1].index, 0, -2, false));
             }
         }
         DemoQueue.Enqueue(new TurnColor(activityType.TURNCOLOR, arr[arr.Count - i - 1].index, MainControl.ColorSetting["normal"], MainControl.ColorSetting["successed"], false, false));
     }
 }
Esempio n. 3
0
        private static void Main()
        {
            #region Array
            Console.WriteLine("Пример работы с массивом:");
            var testArray = new DemoArray();
            testArray.RunTestArray();
            Ending("Array");
            #endregion

            #region ArrayList
            Console.WriteLine("Пример работы с ArrayList:");
            var testArrayList = new DemoArrayList();
            testArrayList.RunTestArrayList();
            Ending("ArrayList");
            #endregion

            #region Stack
            Console.WriteLine("Пример работы со Stack:");
            var testStack = new DemoStack();
            testStack.RunTestStack();
            Ending("Stack");
            #endregion

            #region Queue
            Console.WriteLine("Пример работы с очередью:");
            var testQueue = new DemoQueue();
            testQueue.RunTestQueue();
            Ending("Queue");

            #endregion

            #region Dictionary
            Console.WriteLine("Пример работы со словарем:");
            var testDict = new DemoDictionary();
            testDict.RunTestDictionary();
            Ending("Dictionary");
            #endregion

            #region HashTable
            Console.WriteLine("Пример работы с хеш-таблицей:");
            var testHash = new DemoHashTable();
            testHash.RunTestHashTable();
            Ending("HashTable");
            #endregion

            #region LinkedList
            Console.WriteLine("Пример работы с LinkedList:");
            var testLinkedList = new DemoLinkedList();
            testLinkedList.RunTestLinkedList();
            Ending("LinkedList");
Esempio n. 4
0
        private void merge(int left, int right)
        {
            int mid = (left + right) / 2;

            for (int tt = left; tt <= right; tt++)
            {
                bool flag = false;
                if (tt != right)
                {
                    flag = true;
                }
                DemoQueue.Enqueue(new Movement(activityType.MOVE, arr[tt].index, 0, 2, flag));
            }
            int i = left, j = mid + 1, k = left;

            while (i <= mid && j <= right)
            {
                if (arr[i].num <= arr[j].num)
                {
                    DemoQueue.Enqueue(new Movement(activityType.MOVE, arr[i].index, -(i - k), -2, false));
                    temp[k++].Assign(arr[i++]);
                }
                else
                {
                    DemoQueue.Enqueue(new Movement(activityType.MOVE, arr[j].index, -(j - k), -2, false));;
                    temp[k++].Assign(arr[j++]);
                }
            }

            while (i <= mid)
            {
                DemoQueue.Enqueue(new Movement(activityType.MOVE, arr[i].index, -(i - k), -2, false));
                temp[k++].Assign(arr[i++]);
            }
            while (j <= right)
            {
                DemoQueue.Enqueue(new Movement(activityType.MOVE, arr[j].index, -(j - k), -2, false));;
                temp[k++].Assign(arr[j++]);
            }
            while (left <= right)
            {
                arr[left].Assign(temp[left++]);
            }
        }
 private void SelectSort()
 {
     for (int i = 0; i < arr.Count; i++)
     {
         int minIndex = i;
         DemoQueue.Enqueue(new TurnColor(activityType.TURNCOLOR, arr[i].index, MainControl.ColorSetting["normal"], MainControl.ColorSetting["successed"], false, true));
         for (int j = i + 1; j < arr.Count; j++)
         {
             DemoQueue.Enqueue(new TurnColor(activityType.TURNCOLOR, arr[j].index, MainControl.ColorSetting["normal"], MainControl.ColorSetting["selected"], true, true));
             if (arr[j].num < arr[minIndex].num)
             {
                 DemoQueue.Enqueue(new TurnColor(activityType.TURNCOLOR, arr[j].index, MainControl.ColorSetting["normal"], MainControl.ColorSetting["successed"], false, true));
                 DemoQueue.Enqueue(new TurnColor(activityType.TURNCOLOR, arr[minIndex].index, MainControl.ColorSetting["successed"], MainControl.ColorSetting["normal"], false, true));
                 minIndex = j;
             }
         }
         Log T = MyTools.GetQueueTail(DemoQueue); T.hasNext = false; DemoQueue.Enqueue(T);
         DemoQueue.Enqueue(new Movement(activityType.MOVE, arr[minIndex].index, -(minIndex - i), 0, true));
         DemoQueue.Enqueue(new Movement(activityType.MOVE, arr[i].index, minIndex - i, 0, false));
         arr[i].Swap(arr[minIndex]);
     }
 }
Esempio n. 6
0
        private void ShellSort()
        {
            int len = arr.Count;

            for (int div = len / 2; div >= 1; div = div / 2)
            {
                for (int i = 0; i < div; ++i)
                {
                    int j;
                    for (j = i; j < len; j += div)
                    {
                        DemoQueue.Enqueue(new TurnColor(activityType.TURNCOLOR, arr[j].index, MainControl.ColorSetting["normal"], MainControl.ColorSetting["selected"], false, true));
                    }
                    Log T = MyTools.GetQueueTail(DemoQueue); T.hasNext = false; DemoQueue.Enqueue(T);
                    for (j = i + div; j < len; j += div)
                    {
                        int  k;
                        Part temp = new Part(arr[j]);
                        DemoQueue.Enqueue(new Movement(activityType.MOVE, arr[j].index, 0, 2, false));
                        for (k = j - div; k >= 0 && temp.num < arr[k].num; k -= div)
                        {
                            DemoQueue.Enqueue(new Movement(activityType.MOVE, temp.index, -div, 0, true));
                            DemoQueue.Enqueue(new Movement(activityType.MOVE, arr[k].index, div, 0, false));
                            arr[k + div].Assign(arr[k]);
                        }
                        DemoQueue.Enqueue(new Movement(activityType.MOVE, temp.index, 0, -2, false));
                        arr[k + div].Assign(temp);
                    }
                    for (j = i; j < len; j += div)
                    {
                        DemoQueue.Enqueue(new TurnColor(activityType.TURNCOLOR, arr[j].index, MainControl.ColorSetting["selected"], MainControl.ColorSetting["normal"], false, true));
                    }
                    T = MyTools.GetQueueTail(DemoQueue); T.hasNext = false; DemoQueue.Enqueue(T);
                }
            }
        }
        private void QuickSort(int left, int right)
        {
            if (left == right)
            {
                DemoQueue.Enqueue(new TurnColor(activityType.TURNCOLOR, arr[left].index, MainControl.ColorSetting["normal"]
                                                , MainControl.ColorSetting["successed"], false, false));
                return;
            }
            if (left <= right)
            {
                int temp = UnityEngine.Random.Range(left, right + 1);
                DemoQueue.Enqueue(new TurnColor(activityType.TURNCOLOR, arr[temp].index, MainControl.ColorSetting["normal"], MainControl.ColorSetting["successed"], false, false));
                if (temp != left)
                {
                    DemoQueue.Enqueue(new Movement(activityType.MOVE, arr[temp].index, -(temp - left), 0, true));
                    DemoQueue.Enqueue(new Movement(activityType.MOVE, arr[left].index, temp - left, 0, false));
                    arr[temp].Swap(arr[left]);
                }

                int x = arr[left].num;
                int i = left, j = right;
                while (i < j)
                {
                    while (i < j && arr[j].num >= x)
                    {
                        DemoQueue.Enqueue(new TurnColor(activityType.TURNCOLOR, arr[j].index, MainControl.ColorSetting["normal"], MainControl.ColorSetting["selected"], true, true));
                        j--;
                    }

                    if (i < j)
                    {
                        DemoQueue.Enqueue(new TurnColor(activityType.TURNCOLOR, arr[j].index, MainControl.ColorSetting["normal"], MainControl.ColorSetting["signed"], false, false));
                    }

                    while (i < j && arr[i].num <= x)
                    {
                        DemoQueue.Enqueue(new TurnColor(activityType.TURNCOLOR, arr[i].index, i == left ? MainControl.ColorSetting["successed"] : MainControl.ColorSetting["normal"], MainControl.ColorSetting["selected"], true, true));
                        i++;
                    }

                    bool flag = true;
                    if (i < j)
                    {
                        flag = false;
                        DemoQueue.Enqueue(new TurnColor(activityType.TURNCOLOR, arr[i].index, MainControl.ColorSetting["normal"], MainControl.ColorSetting["signed"], false, false));
                    }

                    if (flag)
                    {
                        Log T = MyTools.GetQueueTail(DemoQueue); T.hasNext = false; DemoQueue.Enqueue(T);
                    }

                    if (i < j)
                    {
                        DemoQueue.Enqueue(new Movement(activityType.MOVE, arr[i].index, j - i, 0, true));
                        DemoQueue.Enqueue(new Movement(activityType.MOVE, arr[j].index, -(j - i), 0, true));
                        DemoQueue.Enqueue(new TurnColor(activityType.TURNCOLOR, arr[i].index, MainControl.ColorSetting["signed"], MainControl.ColorSetting["normal"], false, true));
                        DemoQueue.Enqueue(new TurnColor(activityType.TURNCOLOR, arr[j].index, MainControl.ColorSetting["signed"], MainControl.ColorSetting["normal"], false, false));
                        arr[i].Swap(arr[j]);
                    }
                }
                if (i != left)
                {
                    DemoQueue.Enqueue(new Movement(activityType.MOVE, arr[i].index, -(i - left), 0, true));
                    DemoQueue.Enqueue(new Movement(activityType.MOVE, arr[left].index, i - left, 0, true));
                    DemoQueue.Enqueue(new TurnColor(activityType.TURNCOLOR, arr[i].index, MainControl.ColorSetting["signed"], MainControl.ColorSetting["normal"], false, false));
                    arr[left].Swap(arr[i]);
                }
                QuickSort(left, i - 1);
                QuickSort(i + 1, right);
            }
        }
Esempio n. 8
0
 public QueueController(DemoQueue queue)
 {
     _queue = queue;
 }