2016-12-02 4 views
-4

Я пытаюсь сделать вид пузыря, но я не знаю, что происходит в моем коде. Я сожалею, что код, который я написал, кажется очевидным.^Bubble сортировать логическую ошибку?

main() { 
     int a[5], i, j, smallest, temp; 
     cout << "Enter 5 numbers: " << endl; 
     for (i = 0; i <= 4; i++) { 
      cin >> a[i]; 
     } 

    for (i = 0; i <=4; i++) { 
     smallest = a[i]; 
     for (j = 1; j <= 4; j++) { 
      if (smallest > a[j]) { 
       temp = a[i]; 
       a[i] = a[j]; 
       a[j] = temp; 
      } 
     } 
    } 


     cout << endl << endl; 

     for (i = 0; i <= 4; i++) { 
      cout << a[i] << endl; 
     } 
     system("pause"); 
    } 

Любой ответ будет очень признателен. Благодаря!

+2

Правильный инструмент для решения таких проблем - ваш отладчик. Перед тем, как просить о переполнении стека, вы должны пропустить свой код по очереди *. Для получения дополнительной информации, пожалуйста, прочтите [Как отлаживать небольшие программы (Эрик Липперт)] (https://ericlippert.com/2014/03/05/how-to-debug-small-programs/). Как минимум, вы должны \ [изменить] ваш вопрос, чтобы включить пример [Минимальный, полный и проверенный] (http://stackoverflow.com/help/mcve), который воспроизводит вашу проблему, а также замечания, сделанные вами в отладчик. –

+0

Это сортировка, а не сортировка пузырьков. – GoodDeeds

ответ

1

Ваш пузырьковый корабль почти кажется предпочтительным. Bubblesort смотрит на пары предметов и меняет их при необходимости. Сортировка выбора ищет самый нижний элемент в остальной части массива, а затем свопирует.

#include <iostream> 
#include <utility> 

using std::cin; 
using std::cout; 
using std::endl; 
using std::swap; 

void bubblesort(int a[5]) 
{ 
    bool swapped = true; 
    while (swapped) 
    { 
     swapped = false; 
     for (int i = 0; i < 4; i++) 
     { 
      if (a[i] > a[i + 1]) 
      { 
       swap(a[i], a[i + 1]); 
       swapped = true; 
      } 
     } 
    } 
} 

void selectionSort(int a[5]) 
{ 
    for (int i = 0; i < 4; i++) 
    { 
     int smallest = i; 
     for (int j = smallest; j < 5; j++) 
     { 
      if (a[smallest] > a[j]) 
      { 
       smallest = j; 
      } 
     } 
     if (smallest != i) 
     { 
      swap(a[i], a[smallest]); 
     } 
    } 
} 

int main(int argc, char* argv[]) 
{ 
    int a[5]; 
    cout << "Enter 5 numbers: " << endl; 
    for (int i = 0; i < 5; i++) 
    { 
     cin >> a[i]; 
    } 

    //selectionSort(a); 
    bubblesort(a); 

    cout << endl << endl; 

    for (int i = 0; i <= 4; i++) { 
     cout << a[i] << endl; 
    } 
}