Bubble Sorting - Как это использовать? - PullRequest
1 голос
/ 27 февраля 2020

Я немного новичок в программировании, пытаясь понять идею Алгоритма, поэтому я начал с сортировки Алгоритмов. Так что я много читал об этом и пытался понять его идею, а затем начал с Bubble Sort, но у меня возникла проблема в моем код, может кто-нибудь сказать мне, если я думаю над этим правильно? Я не уверен, что я все еще на правильном пути для этого.

РЕДАКТИРОВАТЬ: Я хочу, чтобы пользователь вставил определенное количество чисел в массив, а затем эти неупорядоченные числа должны быть обменены с помощью Bubble-Sort.

так вот код:

#include <iostream>
using namespace std;

int main(){
    int arr[6];
    int temp;
    cout << "Enter an unarranged amount of numbers(6) \n";
    for(int i=0;i<6;i++){
        cin>>arr[i];
    }
    cout << "Normal List : ";
    for(int i=0;i<6;i++){
        cout << arr[i] << " ";
    }
      //Sorting
    for(int i=0;i<6;i++){
        for(int x=0;x=i+1;x++){
            if(arr[i]>arr[x]){
                temp=arr[x];
                arr[x]=arr[i];
                arr[i]=temp;
            }
        }
         cout << arr[i] << " ";
    }
    return 0;
}

1 Ответ

2 голосов
/ 27 февраля 2020

Это l oop

for(int x=0;x=i+1;x++){

является бесконечным l oop, потому что в условии l oop используется присвоение

x=i+1

Так что значение x, то есть значение условия, никогда не будет равно 0.

А алгоритм пузырьковой сортировки сравнивает и обменивает соседние элементы массива.

Также вы можете использовать стандарт функция std::swap для обмена элементами массива.

Циклы, которые реализуют сортировку пузырьков, могут выглядеть, например, следующим образом, как показано в демонстрационной программе ниже

#include <iostream>
#include <utility>

int main() 
{
    const size_t N = 6;

    int arr[N];

    std::cout << "Enter an unarranged amount of " << N << " numbers: ";

    for ( auto &item : arr ) std::cin >> item;

    std::cout << "Before sorting: ";
    for ( const auto &item : arr ) std::cout << item << ' ';
    std::cout << '\n';

    for ( size_t n = N, last = n; !( n < 2 ); n = last )
    {
        for ( size_t i = last = 1; i < n; i++ )
        {
            if ( arr[i] < arr[i-1] )
            {
                std::swap( arr[i], arr[i-1] );
                last = i;
            }
        }
    }

    std::cout << "After  sorting: ";
    for ( const auto &item : arr ) std::cout << item << ' ';
    std::cout << '\n';

    return 0;
}

Его вывод может выглядеть, например, как

Enter an unarranged amount of 6 numbers: 6 3 1 2 4 5
Before sorting: 6 3 1 2 4 5 
After  sorting: 1 2 3 4 5 6 

Что касается вашего кода, то внутренний l oop должен выглядеть как минимум как

    for(int x = 1; x < 6; x++ ){
        if ( arr[x-1] > arr[x] ){
            temp=arr[x];
            arr[x]=arr[x-1];
            arr[x-1]=temp;
        }
    }

и удалить этот оператор после l oop

cout << arr[i] << " ";
...