为啥冒泡排序被称为冒泡排序?
Posted
技术标签:
【中文标题】为啥冒泡排序被称为冒泡排序?【英文标题】:Why bubble sort is called bubble sort?为什么冒泡排序被称为冒泡排序? 【发布时间】:2015-09-12 14:22:31 【问题描述】:我正在学习冒泡排序。而且我每次都倾向于忘记排序的类型。所以我试图找到每种排序的逻辑含义,以便它有助于回忆排序的逻辑:
我不明白为什么冒泡排序被命名为冒泡排序的确切含义?
【问题讨论】:
【参考方案1】:Why is it called bubble sort?
冒泡排序之所以得名,是因为元素倾向于按照正确的顺序向上移动,就像气泡上升到表面一样。
【讨论】:
【参考方案2】:之所以称为冒泡排序,是因为在算法的一次迭代中,最小/最大元素将在其最终位置出现在数组的末尾/开头。
所以从某种意义上说,在冒泡排序算法的一次迭代期间数组中元素的移动类似于水中升起的气泡的移动
【讨论】:
【参考方案3】:引用Wikipedia:
冒泡排序,有时也称为下沉排序,是一种简单的排序算法,它反复遍历待排序的列表,比较每对相邻项并交换如果它们的顺序错误。重复通过列表,直到不需要交换,这表明列表已排序。该算法是一种比较排序,以较小的元素“冒泡”到列表顶部的方式命名。
【讨论】:
【参考方案4】:正如其他答案已经说明的那样,“冒泡排序”的命名方式是因为元素会慢慢移动到列表的所需末尾,类似于气泡向表面移动的方式。
【讨论】:
【参考方案5】:因为对于每次迭代,一个元素通过比较和交换冒泡到最后一个未排序的子序列
auto bubble_sort(vector<int>& vs)
int n = vs.size();
bool swapped = false;
for(int i = 0; i < n-1; ++i) // total # of iterations
for(int j = 0; j < n-i-1; ++j) // each iterations bubbles up 1 element
if(vs[j] > vs[j+1])
swap(vs[j], vs[j+1]);
swapped = true;
if(!swapped) break;
return vs;
【讨论】:
以上是关于为啥冒泡排序被称为冒泡排序?的主要内容,如果未能解决你的问题,请参考以下文章