在看邓俊辉老师的数据结构网课的时候看到一个不一样的冒泡排序的学代码方法,贴一下以便日后复习。
void bubblesort(vector<int>& v, int n){
for (bool sorted = false; sorted = !sorted; n--){
for (int i = 1; i < n; i++){
if (v[i - 1]>v[i]){
swap(v[i - 1], v[i]);
sorted = false;
}
}
}
}
这里面第一层循环的sorted=!sorted等价于!sorted,若sorted为真(true),此时则退出循环;若sorted为假(false),则循环继续。
初始时sorted为假,但进入循环时由于判定sorted=!sorted使sorted变成了真,进入里层循环之后,若后面元素有交换,则sorted重置为假,循环继续;若没有交换则sorted保持为真,回来判定sorted=!sorted时为假,循环结束。