【发布时间】:2018-09-13 14:11:57
【问题描述】:
如果有办法在冒泡排序算法中实际找到数组所需的交换次数,我只是在徘徊。我知道你们中的一些人可能会认为实际上使用冒泡排序对数组进行排序并在我们交换时增加计数有什么害处。但我认为为什么会不必要地增加程序的复杂性,因为我只需要对数组进行排序所需的交换次数。 我需要降低以下代码的复杂度。
void minimumBribes(vector<int> q) {
int count=0;
//returns Too chaotic if the element is farther then two positions to the left.
for(int i=0;i<q.size();i++){
if(q[i]-(i+1)>2){
cout<<"Too chaotic"<<endl;
return;
}
}
//counts the number of swaps required
for(int i=0;i<q.size();i++){
for(int j=0;j<q.size()-i-1;j++){
if(q[j]>q[j+1]){
swap(q[j],q[j+1]);
count++;
}
}
}
cout<<count<<endl;
}
一个小代码 sn-p 会很好,因为我在这方面做得不是很好。
【问题讨论】:
-
我看不出你会怎么做。每次交换都会影响以后的比较,因此您不能只进行“试运行”并得出正确数量的交换。
-
考虑到您只将冒泡排序用于学术练习,我并没有真正看到“降低复杂性”的论点
-
实际上我需要降低挑战的复杂性,我认为这样做的唯一方法是这样做,或者我发布代码并直接要求降低代码的复杂性
-
没有不必要的复杂性增加。计算所需交换的数量与实际进行交换的复杂性相同。也许你误解了“复杂性”的含义,它不一定等同于效率
-
或者更好的是,复制 O(n) 的数组并在进行 O(n^2) 排序时计算交换。与冒泡排序本身的 O(n^2) 相比,复制的 O(n) 成本将微不足道
标签: c++ sorting time-complexity swap