Algorithm 为什么冒泡排序被称为冒泡排序?

Algorithm 为什么冒泡排序被称为冒泡排序?,algorithm,sorting,bubble-sort,Algorithm,Sorting,Bubble Sort,我在学泡泡排序。每次我都会忘记那种类型。因此,我试图找到每种排序的逻辑意义,以便有助于回忆排序的逻辑: 我无法理解为什么冒泡排序被命名为冒泡排序的确切含义?它被称为冒泡排序,因为在算法的一次迭代中,最小/最大的元素将出现在数组末尾/开头的最后位置 因此,在某种意义上,在气泡排序算法的一次迭代过程中,数组中元素的移动类似于在水中升起的气泡的移动 气泡排序之所以得名,是因为元素倾向于按正确的顺序向上移动,就像气泡上升到表面一样 引述自: 冒泡排序,有时被称为下沉排序,是一种简单的排序算法,它重复遍历

我在学泡泡排序。每次我都会忘记那种类型。因此,我试图找到每种排序的逻辑意义,以便有助于回忆排序的逻辑:


我无法理解为什么冒泡排序被命名为冒泡排序的确切含义?

它被称为冒泡排序,因为在算法的一次迭代中,最小/最大的元素将出现在数组末尾/开头的最后位置

因此,在某种意义上,在气泡排序算法的一次迭代过程中,数组中元素的移动类似于在水中升起的气泡的移动

气泡排序之所以得名,是因为元素倾向于按正确的顺序向上移动,就像气泡上升到表面一样

引述自:

冒泡排序,有时被称为下沉排序,是一种简单的排序算法,它重复遍历要排序的列表,比较每对相邻项,并在它们的顺序错误时交换它们。重复传递列表,直到不需要交换,这表示列表已排序。该算法是一种比较排序,以较小的元素“冒泡”到列表顶部的方式命名


正如其他答案已经指出的,“气泡排序”的命名方式是因为元素将缓慢移动到列表的所需末端,类似于气泡将如何移动到曲面。

因为对于每个迭代,一个元素通过比较和交换将气泡移动到未排序的子序列的最后一个

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;
}
自动冒泡_排序(向量&vs)
{
int n=vs.size();
布尔交换=假;
对于(int i=0;ivs[j+1])
{
互换(对[j],对[j+1]);
交换=真;
}
}
如果(!交换)中断;
}
回报vs;
}