示例#1
0
        public void SingleStep()
        {
            if (_thread != null && _thread.IsAlive)
            {
                if (_currentMode == ModeCategory.SingleStep || _currentMode == ModeCategory.Paused)
                {
                    _thread.Resume();
                }
                else
                {
                    _currentMode = ModeCategory.SingleStep;
                    SetButtonsEnable(false, true, true, false, true);
                    IsSortCategoriesEnabled = false;
                    ConsoleContent          = "已进入单步模式。";
                }
                return;
            }
            //没有数据
            if (_currentData == null)
            {
                Generate();
            }

            _currentMode = ModeCategory.SingleStep;
            var stepList = SortStepGenerator.Sort(_sortCategory, _currentData);

            _thread = new Thread(() =>
            {
                ExecuteSteps();
            });
            _thread.Start();
            SetButtonsEnable(false, true, true, false, true);
            IsSortCategoriesEnabled            = false;
            (GetView() as PUWindow).ResizeMode = ResizeMode.CanMinimize;
        }
示例#2
0
        /// <summary>
        /// 执行排序步骤集合。
        /// </summary>
        private void ExecuteSteps()
        {
            var counter = 0;

            foreach (var step in SortStepGenerator.Sort(_sortCategory, _currentData))
            {
                var canvas = ActiveItem;

                if ((_currentMode == ModeCategory.SingleStep || _currentMode == ModeCategory.Paused) && counter != 1 && step.Category != StepCategory.ChangeIndex)
                {
                    try { _thread.Suspend(); } catch { }
                }

                ConsoleContent = step.Description;
                switch (step.Category)
                {
                //移动指示器
                case StepCategory.MoveIndivator:
                    canvas.MoveIndicator(step.From - 1, step.To);
                    canvas.SetHighLight(step.SelectedIndex);
                    break;

                //交换条并交换索引
                case StepCategory.SwapBar:
                    canvas.MoveBar(step.From, step.To);
                    canvas.MoveBar(step.To, step.From);
                    canvas.SwapIndex(step.From, step.To);
                    canvas.SetHighLight(step.SelectedIndex);
                    break;

                //移动条
                case StepCategory.MoveBar:
                    canvas.MoveBar(step.From, step.To, step.Raise);
                    canvas.SetHighLight(step.SelectedIndex);
                    break;

                //修改索引映射
                case StepCategory.ChangeIndex:
                    canvas.ChangeIndex(step.ChangedIndexList);
                    if (step.SkipWaiting)
                    {
                        continue;
                    }
                    break;

                //创建桶:
                case StepCategory.CreateBucket:
                    canvas.CreateBucket(step.BucketQuantity, step.BucketVolumes);
                    break;

                //排序完成
                case StepCategory.Completed:
                    SetButtonsEnable(true, false, false, false, true);
                    canvas.ResetIndicatorAndBucket();
                    canvas.SetHighLight(-2);
                    break;
                }
                counter++;
                if (_currentMode != ModeCategory.SingleStep && _currentMode != ModeCategory.Paused)
                {
                    Thread.Sleep(ExcuteDuration);
                }
            }
        }
示例#3
0
        // 生成操作
        public void Generate()
        {
            if (InputDataString == "" || IsUsingRandomChecked)
            {
                //尝试转换为Int
                var quantity = 0;
                if (Int32.TryParse(InputQuantityString, out quantity))
                {
                    InputDataString = NumbersToString(GetRandomNumbers(quantity));
                }
                else
                {
                    InputQuantityString = "15";
                    InputDataString     = NumbersToString(GetRandomNumbers(15));
                }
                IsUsingRandomChecked = true;
            }
            else
            {
                InputDataString = InputDataString.Replace(',', ',');
                if (InputDataString.Split(',').Length - 1 <= 1)
                {
                    ConsoleContent = $"可用数据的数量低于最小值2。";
                    return;
                }
            }
            _currentData = StringToNumbers(InputDataString).ToList();
            if (_currentData.Min() == _currentData.Max())
            {
                ConsoleContent = $"无法对多个相同数据执行排序。";
                return;
            }

            ActiveItem.InitCanvas(_currentData);
            SetButtonsEnable();
            IsSortCategoriesEnabled = true;
            ConsoleContent          = $"生成成功,共获取到{_currentData.Count}个数据。使用{_sortCategory}大约需要{SortStepGenerator.Sort(_sortCategory, _currentData)?.Where(x => x.Category != StepCategory.ChangeIndex).Count() - 1}步。";
        }
示例#4
0
 //用户选择了新算法。
 public void SortCategoryCheckedChanged(int id)
 {
     _sortCategory = (SortCategory)id;
     if (_currentData != null)
     {
         ConsoleContent = $"生成成功,共获取到{_currentData.Count}个数据。使用{_sortCategory}大约需要{SortStepGenerator.Sort(_sortCategory, _currentData)?.Where(x => x.Category != StepCategory.ChangeIndex).Count() - 1}步。";
     }
 }