插秧排序法:以 QVector 为例

简述

比冒泡排序法更高效的排序方法,如果数组有 N 个元素,只须经过 N 次赋值,即可实现完全排序。

  • 简述
  • 原理
  • 代码

原理

该过程类似插秧,原始数据好比秧苗。首先取出第一株秧苗,直接栽在地里,第二柱与第一株比较,若较大则栽在第一株前面,反之栽在其后。对于所有秧苗来说,它只需要栽在它遇到的第一株比自己小的那株秧苗前面即可,若它最小,则它栽在最后。

代码

// 函数的参数 vecSource 为输入,函数的返回值为输出。
QVector<int> RicePlant(QVector<int> &vecSource)
{
    QVector<int> vecResult;
    vecResult.append(vecSource[0]);

    for (int sourceIndex = 1; sourceIndex < vecSource.size(); sourceIndex++)
    {
        int resultSize = vecResult.size();//注意!下面的for循环条件中,只能使用resultSize,而不能直接用 vecResult.size()。否则会进入死循环。
        for (int resultIndex = 0; resultIndex < resultSize; resultIndex++)
        {
            if (vecSource[sourceIndex]>vecResult[resultIndex])
            {
                vecResult.insert(resultIndex, vecSource[sourceIndex]);
                break;;
            }
            if (resultIndex == vecResult.size() - 1)
                vecResult.append(vecSource[sourceIndex]);
        }
    }
    return vecResult;
}

你可能感兴趣的:(C++,算法,排序,QVector,高效,插秧)