为啥冒泡排序被称为冒泡排序?

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;

【讨论】:

以上是关于为啥冒泡排序被称为冒泡排序?的主要内容,如果未能解决你的问题,请参考以下文章

冒泡排序(面试版)

为啥冒泡排序没有效率?

算法 —— 冒泡排序

为啥插入排序比快速排序和冒泡排序更快?

冒泡排序编程中 j为啥要减1

为啥在我的情况下快速排序总是比冒泡排序慢?