Beispiel #1
0
    /// <summary>
    /// 选择排序
    /// </summary>
    /// <returns></returns>
    public IEnumerator SelectSort()
    {
        yield return(new WaitForEndOfFrame());

        BarVo      barVo      = this.barManager.GetBarVo();
        RecorderVo recorderVo = this.barManager.GetRecorderVo();

        int len  = this.barManager.barList.Count;
        int maxI = len - 1;

        recorderVo.Plus(
            RecoderType.Assign                          // len 赋值
            , RecoderType.Compute, RecoderType.Assign   // j计算和赋值
            , RecoderType.Assign                        // for 循环 i 初始化
            );

        for (int i = 0; i < maxI; i++)
        {
            int minIndex = i;
            recorderVo.Plus(
                RecoderType.Compare, RecoderType.Compute, RecoderType.Assign    // i 对比、自增
                , RecoderType.Assign                                            // minIndex 初始化
                , RecoderType.Compute, RecoderType.Assign                       // 下面 j 初始化(计算和赋值)
                );

            for (int j = i + 1; j < len; j++)
            {
                bool isBigger = this.barManager.CompareBars(j, minIndex);
                yield return(new WaitForSeconds(barVo.compareSeconds));

                recorderVo.Plus(
                    RecoderType.Compare, RecoderType.Compute, RecoderType.Assign    // j 对比、自增
                    , RecoderType.Compare                                           // 对比大小
                    );
                if (!isBigger)
                {
                    minIndex = j;
                    recorderVo.Plus(RecoderType.Assign);    // 赋值
                }
            }

            recorderVo.Plus(RecoderType.Compare);    // 对比
            if (minIndex != i)
            {
                recorderVo.Plus(RecoderType.Assign, RecoderType.Assign, RecoderType.Assign); // 交换三次赋值
                this.barManager.SwapBars(minIndex, i, true);
                yield return(new WaitForSeconds(barVo.swapSeconds));
            }
        }

        this.barManager.Finished();
    }
Beispiel #2
0
    /// <summary>
    /// 冒泡排序法
    /// </summary>
    public IEnumerator BubbleSort()
    {
        yield return(new WaitForEndOfFrame());

        BarVo      barVo      = this.barManager.GetBarVo();
        RecorderVo recorderVo = this.barManager.GetRecorderVo();

        int  maxI = this.barManager.barList.Count - 1;
        bool finished;

        recorderVo.Plus(
            RecoderType.Compute     // -1 运算
            , RecoderType.Assign    // mixI 赋值
            );
        do
        {
            finished = true;
            recorderVo.Plus(
                RecoderType.Compare     // do while 判断(含多记录的一条)
                , RecoderType.Assign    // finished 赋值
                , RecoderType.Assign    // 下面 i 初始化赋值
                );
            for (int i = 0; i < maxI; i++)
            {
                int  j         = i + 1;
                bool isIBigger = this.barManager.CompareBars(i, j);
                recorderVo.Plus(
                    RecoderType.Compare, RecoderType.Compute, RecoderType.Assign // i 对比、i 运算、i赋值
                    , RecoderType.Compute, RecoderType.Assign                    // j 计算、j 赋值
                    , RecoderType.Compare                                        // 比较大小
                    );
                yield return(new WaitForSeconds(barVo.compareSeconds));

                if (isIBigger)
                {
                    this.barManager.SwapBars(i, j, true);
                    finished = false;
                    recorderVo.Plus(
                        RecoderType.Assign, RecoderType.Assign, RecoderType.Assign  // 交换三次赋值
                        , RecoderType.Assign                                        // finished 赋值
                        );
                    yield return(new WaitForSeconds(barVo.swapSeconds));
                }
            }
        } while (!finished);
        recorderVo.Correct(RecoderType.Compare, -1); // 因 do while 导致多记录一次 对比

        this.barManager.Finished();
    }
Beispiel #3
0
 /// <summary>
 /// 设置bar配置参数
 /// </summary>
 /// <param name="barVo"></param>
 public void SetBarVo(BarVo barVo)
 {
     this.barVo = barVo;
     this.reset();
 }
Beispiel #4
0
 /// <summary>
 /// 设置参数配置
 /// </summary>
 /// <param name="vo"></param>
 public void SetBarVo(BarVo vo)
 {
     this.checkRunLock();
     this.barVo = vo;
     this.Init();
 }
Beispiel #5
0
 /// <summary>
 /// 重置配置参数
 /// </summary>
 public void ResetConfig()
 {
     this.barVo = new BarVo();
     this.cvs.barManager.SetBarVo(this.barVo);
 }