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);
            }
        }