C ++冒泡排序(升序)函数不返回结果

时间:2015-04-21 19:47:34

标签: c++ function sorting

我试图在函数中使用冒泡排序而不是内联,我似乎遇到了返回结果的问题。和目前一样,它根本没有给我任何结果。这是我到目前为止编写的代码......

基本上,用户告诉程序他们想要输入多少个数字(最多允许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;
 }

2 个答案:

答案 0 :(得分:1)

你所写的不是经典的冒泡算法。冒泡排序每次遍历整个数组,与其直接后继者交换元素,反复执行此操作直到不再发生交换。

在传统的实现中,没有“嵌套for循环”。有一个for循环嵌套在while或repeat-until结构中。

该算法被称为“气泡”,因为最低值“冒泡”到顶部...大致以非常粘稠的油中捕获气泡的速度。

(比较一下,比如Shell排序,这对于Bubble来说是一个看似微不足道的改变,它带来了巨大的变化。对于典型的和权威的Quicksort来说。)

答案 1 :(得分:1)

马蒂亚斯指出了我正确的方向。我忘了初始化变量&#39; val&#39;。当我纠正它时,它完美地运作。

至于每个人都说这不是一个经典的冒泡类型,我已经在多个网站和我教授的幻灯片上看到了这个确切的形式,这种写作方式出了什么问题?

我现在尝试这样做了,而且它完全失败了我(叹息):

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;
            }
         }
     }
 }