【发布时间】:2017-04-23 22:00:26
【问题描述】:
我正在用 C++ 做一些关于排序算法的练习,但其中一个我听不懂。
它说要实现一个函数,给定一个整数数组,应该使用冒泡排序算法(迭代)对它们进行排序,该函数应该在 for 循环没有促进交换时立即终止的元素。这甚至可能吗?
按照我的理解,终止算法的正常条件是排序等于 1。所以,在这个例子中,
void bubblesort( int v[], int size ) {
for( int i = size; i > 0; --i )
for( int j = 0; j < i; ++j ) {
if( v[j] <= v[j+1] ) continue;
int aux = v[j];
v[j] = v[j+1];
v[j+1] = aux;
}
}
但这并不能解决练习,是吗?
【问题讨论】:
-
是的,这是可能的,它也在维基百科上的伪代码:en.wikipedia.org/wiki/Bubble_sort#Implementation
-
这不仅不能解决问题,而且是未定义的行为和错误,因为显示的代码偏移了 1,并且超出了数组的末尾。
-
如果 v 是一个从 0 开始的数组,最后一个元素是 size-1 而不是 size...所以你的数组从 1 开始到 size
标签: c++ bubble-sort