【发布时间】:2015-09-12 14:22:31
【问题描述】:
我正在学习冒泡排序。而且我每次都倾向于忘记排序的类型。所以我试图找到每种排序的逻辑含义,以便它有助于回忆排序的逻辑:
我不明白为什么冒泡排序被命名为冒泡排序的确切含义?
【问题讨论】:
标签: algorithm sorting bubble-sort
我正在学习冒泡排序。而且我每次都倾向于忘记排序的类型。所以我试图找到每种排序的逻辑含义,以便它有助于回忆排序的逻辑:
我不明白为什么冒泡排序被命名为冒泡排序的确切含义?
【问题讨论】:
标签: algorithm sorting bubble-sort
冒泡排序之所以得名,是因为元素倾向于按照正确的顺序向上移动,就像气泡上升到表面一样。
【讨论】:
之所以称为冒泡排序,是因为在算法的一次迭代中,最小/最大元素将在其最终位置出现在数组的末尾/开头。
所以从某种意义上说,在冒泡排序算法的一次迭代期间数组中元素的移动类似于水中升起的气泡的移动
【讨论】:
引用Wikipedia:
冒泡排序,有时也称为下沉排序,是一种简单的排序算法,它反复遍历待排序的列表,比较每对相邻项并交换如果它们的顺序错误。重复通过列表,直到不需要交换,这表明列表已排序。该算法是一种比较排序,以较小的元素“冒泡”到列表顶部的方式命名。
【讨论】:
正如其他答案已经说明的那样,“冒泡排序”的命名方式是因为元素会慢慢移动到列表的所需末尾,类似于气泡向表面移动的方式。
【讨论】:
因为对于每次迭代,一个元素通过比较和交换冒泡到最后一个未排序的子序列
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;
}
【讨论】: