我有一个家庭作业来创建一个线性时间算法来排序一个只包含a,b和c的字符数组。上面的算法是成功的,但我不确定for循环内的递归调用是否是线性时间。
void setter(char C[], int lo, int hi)
{
for(int j = lo; j < hi; ++j)
{
if(C[j] > C[j+1])
{
swap(C[j],C[j+1]);
setter(C,0,j+1,);
}
}
}
答案 0 :(得分:0)
我相信你的算法的时间复杂度是O(n ^ 2)。由于会跳过很多递归调用,因此生成证明有点单调乏味。
尝试对线性时间复杂度算法进行排序。 计算每个a,b,c的出现次数。然后生成输出数组。