【发布时间】:2021-08-23 03:41:36
【问题描述】:
昨天遇到了冒泡排序的递归实现,乍一看很优雅:
template <class T> void bubblesort_recursive(T data[], const int n){
if(n==1) return;
else{
bubblesort_recursive(data+1, n-1);
if(data[1]<data[0]) swap(data[1],data[0]);
bubblesort_recursive(data+1, n-1);
}
}
然而,我很快意识到它调用了递归情况两次,其时间复杂度的时间递归关系似乎遵循 T(n)=2T(n-1)+c,这导致了指数时间复杂度。但是,冒泡排序通常会导致 n^2 时间复杂度。我的分析是否有问题,或者这只是冒泡排序的低效实现?如果是后者,如何改进?
【问题讨论】:
-
昨天我遇到了冒泡排序的递归实现,乍一看很优雅: -- 冒泡排序没有什么优雅的地方。冒泡排序是 O(n^2) - 任何比这更快的,它不是冒泡排序。
-
尝试使用
n=5遍历此算法。在第二次调用bubblesort_recursive时,您应该会看到一些明显的浪费。目前尚不清楚您的“改进”标准是什么。 -
“如何改进” - 不要为递归而烦恼,更不用说冒泡排序了。它有一个非常有限的可行用例。不管你给那只猪涂了多少“优雅”的口红,它仍然是一头猪。
-
你能分享你找到它的链接吗?
-
这不是冒泡排序,尽管函数名称如此。