2015-04-21 4 views
-3

Я пытаюсь использовать сортировку пузыря в функции вместо встроенного, и у меня, похоже, проблема с возвратом результатов. Как и в настоящее время, это не дает мне никаких результатов. Вот мой код, который я написал до сих пор ...C++ Bubble Сортировать (по возрастанию) функция не возвращает результаты

В принципе, пользователь сообщает программе, сколько номеров они хотят ввести (до 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

Altough это не действительно пузырьковая сортировка алгоритм вашей проблемы в том, что вы сохраняете размер массива, который нужно сортировать по amt, и вы передаете val в функцию сортировки, которая инициализируется 0. Кроме того, вы проверяете, является ли i > amt; ... –

+0

Это сделало это ... конечно, что-то такое же маленькое, что и меня. Спасибо вам за помощь! Кроме того, все говорят, что на самом деле это не пузырь, но я вижу эту точную форму на всех форумах и из документов прямо из моего профессора, наверное, я чего-то не хватает ... – Dpry12

ответ

1

Mathias указал мне в правильном направлении. Я забыл инициализировать переменную «val». Когда я исправил это, он работает отлично.

Что касается всех, говорящих, что это не классический вид пузыря, я видел эту точную форму на нескольких сайтах и ​​на слайдах от моего профессора, что не так с этим способом написания?

Я пытаюсь это сейчас вместо этого, и это полностью неудачи на меня (вздохе):

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

Что вы написали не классический алгоритм пузырьковой сортировки. Bubble-sort выполняет итерацию по всему массиву каждый раз, обменивая элементы своим непосредственным преемником, делая это над-и-до, пока не произойдет больше свопов.

В традиционной реализации нет «вложенных для-петель». В течение одной петли вложенной или повторяющейся структуры.

Алгоритм называется «пузырь», потому что самое низкое значение «пузыривается» вверху ... с примерно скоростью пузыря, запертого в очень вязком масле.

(Сравните с, скажем, Шелла, который представляет собой небольшое кажущийся изменения в пузырь, что делает огромную разницу. А квинтэссенцией и окончательного Quicksort.)

Смежные вопросы