我试图在函数中使用冒泡排序而不是内联,我似乎遇到了返回结果的问题。和目前一样,它根本没有给我任何结果。这是我到目前为止编写的代码......
基本上,用户告诉程序他们想要输入多少个数字(最多允许20个),然后按照输入的顺序将这些数字输入到数组中。然后它打印输入的值,排序并打印排序的值。或者至少应该发生什么。
提前感谢您的帮助!
#include <iostream>
using namespace std;
int vault[20] = {}; // array to store the 20 values
int val = 0; // variable to pass values to the array
int amt = 0; // variable to get the amount of numbers the user is going to enter
int i = 0; // loop counter
// Bubble Sort Function Prototype
void bubble (int (&vault)[20], int val);
// Bubble Sort Function
void bubble (int (&vault)[20], int val)
{
int swap = 1; // flag used to indicate swaps occuring
int temp = 0; // holder variable
int x = 0; // loop counter
int y = 0; // second loop counter
for (x = 0; (x < val) && (swap = 1); x++)
{
swap = 0;
for (y = x+1; y < val; y++)
{
if (vault[x] > vault[y])
{
temp = vault[x];
vault[x] = vault[y];
vault[y] = temp;
swap = 1;
}
}
}
return;
}
int main()
{
cout << "Welcome to the Bubble Sort exe\n\n" << endl;
cout << "Please enter in the amount of numbers you would like to enter: ";
cin >> amt;
cout << "Please enter the values you wish to enter: ";
for(i = 0; i < amt; i++)
{
cin >> vault[i];
}
cout << "The values you entered in order are: ";
for (i = 0; i < amt; i++)
{
cout << vault[i] << ' ';
}
cout << "\n\nLet me just sort that for you!" << endl;
bubble(vault, val);
cout << "\n\nHere are the values in ascending order:\n" << endl;
for (i = 0; i < val; i++)
{
cout << vault[i] << ' ';
}
system("pause");
return 0;
}
答案 0 :(得分:1)
你所写的不是经典的冒泡算法。冒泡排序每次遍历整个数组,与其直接后继者交换元素,反复执行此操作直到不再发生交换。
在传统的实现中,没有“嵌套for循环”。有一个for循环嵌套在while或repeat-until结构中。
该算法被称为“气泡”,因为最低值“冒泡”到顶部...大致以非常粘稠的油中捕获气泡的速度。
(比较一下,比如Shell排序,这对于Bubble来说是一个看似微不足道的改变,它带来了巨大的变化。对于典型的和权威的Quicksort来说。)
答案 1 :(得分:1)
至于每个人都说这不是一个经典的冒泡类型,我已经在多个网站和我教授的幻灯片上看到了这个确切的形式,这种写作方式出了什么问题?
我现在尝试这样做了,而且它完全失败了我(叹息):
void bubble (int (&vault)[20], int val)
{
bool swap = true; // flag used to indicate swaps occuring
int temp = 0; // holder variable
int x = 0; // loop counter
int y = 0; // second loop counter
while (swap = true)
{
swap = false;
x++;
for (y = 0; y < val - x; y++)
{
if (vault[y] > vault[y+1])
{
temp = vault[y];
vault[y] = vault[y+1];
vault[y+1] = temp;
swap = true;
}
}
}
}