我只是在和我的导师讨论泡泡排序,他告诉我泡泡排序被称为两个for循环,一个嵌套在另一个循环中.在我开始分配之前没有给出,所以没关系,这很好,但这个代码的冒泡排序有什么问题:
int num = 0, i = 0;
bool go = true;
while (i < size - 1){
if (array[i] > array[i + 1]){
num = array[i];
array[i] = array[i + 1];
array[i + 1] = num;
go = false;
}
i++;
if (i >= size - 1 && go == false){
i = 0;
go = true;
}
}
for (int i = 0; i < size; i++){
cout << array[i];
}
Run Code Online (Sandbox Code Playgroud)
它不会像冒泡那样做同样的事情吗?
int i, j;
bool flag = true;
int temp;
int numLength = size;
for (i = 1; (i <= numLength) && flag; i++)
{
flag = false;
for (j = 0; j < (numLength - 1); j++)
{
if (array[j + 1] < array[j])
{
temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
flag = true;
}
}
}
for (int i = 0; i < size; i++){
cout << array[i];
}
return;
Run Code Online (Sandbox Code Playgroud)
谢谢!
冒泡排序算法需要两个循环:内部循环遍历项目并交换它们如果相邻的顺序乱序,外部重复直到不再进行更改.
您的实现确实有两个循环.只是其中一个是使用标志和if条件实现的,它会重置外部循环变量.它会做同样的事情 - 循环遍历项目,直到不再需要交换.
但请注意,以这种方式构造算法并不会使其更高效,更快或类似.它只是让你更难弄清楚发生了什么.