1 Востаннє редагувалося marketesh (13.12.2014 14:00:45)

Тема: Сортування бульбашкою

не розумію у чому проблема. При введені даних у масив: 0-ий елемент = 5, 1-ий = 4 і т.д. в результаті виходить, що 4 із 3 не міняються.
Код програми

using namespace std;

int main()
{
    setlocale(LC_ALL, "russian"); 
    const int size = 5;
    int mas[size];
    int tmp;
    // Введення даних у масив користувачем
    for (int i = 0; i < size; i++){
        cout << "Введіть " << i << " елемент масиву ";
        cin >> mas[i];
    }
    // Виведення масиву на екран
    for (int i = 0; i < size; i++){
        cout << "Елемент з індексом " << i << " має значення " << mas[i] << endl;
    }
    // Сортування масиву бульбашкою
    int x = 0;
    for (int i = size - 1; i >= x; i--)
    {
        for (int j = size - 1; j >= x; j--)    {
            if (mas[j] < mas[j-1])    {
                tmp = mas[j];
                mas[j] = mas[j-1];
                mas[j-1] = tmp;
                cout << "елемент " << j << " помінявся з елементом " << j - 1 << " << " << endl; // наводка
                                    }

                                            }
        x++;
    }
    // виведення відсортованого масиву
    cout << "Виведення відсортованого масиву" << endl;
    for (int i = 0; i < size; i++){
        cout << "Елемент з індексом " << i << " має значення " << mas[i] << endl;
    }
    system("pause");
    return 0;
}

Щиро дякую

Post's attachments

Безымянный.jpg 178.99 kb, 407 downloads since 2014-12-13 

2

Re: Сортування бульбашкою

    // Сортування масиву бульбашкою
    int x = 0;
    for (int i = size - 1; i > x; i--)
    {
        for (int j = size - 1; j > x; j--) {
            if (mas[j] < mas[j - 1]) {
                tmp = mas[j];
                mas[j] = mas[j - 1];
                mas[j - 1] = tmp;
                cout << "елемент " << j << " помінявся з елементом " << j - 1 << " << " << endl; // наводка
            }

        }
        //x++;
    }

3

Re: Сортування бульбашкою

та це я в курсі, але ж хочеться зробити типу такого: якщо одиниця, яка знаходиться у mas[4] є найменшим числом, і вона виплила на першу позицію, тобто mas[0], то щоб надалі mas[0] вже не сканувався для сортування.
Логічно? Чи то мої прибамбаси такі не нормальні? :)

4

Re: Сортування бульбашкою

marketesh написав:

та це я в курсі, але ж хочеться зробити типу такого: якщо одиниця, яка знаходиться у mas[4] є найменшим числом, і вона виплила на першу позицію, тобто mas[0], то щоб надалі mas[0] вже не сканувався для сортування.
Логічно? Чи то мої прибамбаси такі не нормальні? :)

Тоді треба прибрати i--, бо ви за один прохід зменшуєте масив, який сортується, на два елемента: з одної сторони і з іншої. Перший елемент найменший, а останній — як пощастить.

Подякували: marketesh1

5

Re: Сортування бульбашкою

quez написав:
marketesh написав:

та це я в курсі, але ж хочеться зробити типу такого: якщо одиниця, яка знаходиться у mas[4] є найменшим числом, і вона виплила на першу позицію, тобто mas[0], то щоб надалі mas[0] вже не сканувався для сортування.
Логічно? Чи то мої прибамбаси такі не нормальні? :)

Тоді треба прибрати i--, бо ви за один прохід зменшуєте масив, який сортується, на два елемента: з одної сторони і з іншої. Перший елемент найменший, а останній — як пощастить.

Дякую!!! Чесно скажу, не знав, що можна просто написати "i"  і воно прийметься. Ще раз дякую :)

6

Re: Сортування бульбашкою

Отже, готове сортування бульбашкою на випадок тому, хто теж колись наступить на ті ж самі граблі, що і я )))

#include "stdafx.h"
#include <iostream>

using namespace std;

int main()
{
    setlocale(LC_ALL, "russian"); 
    const int size = 5;
    int mas[size];
    int tmp;
    // Введення даних у масив користувачем
    for (int i = 0; i < size; i++){
        cout << "Введіть " << i << " елемент масиву ";
        cin >> mas[i];
    }
    // Виведення масиву на екран
    for (int i = 0; i < size; i++){
        cout << "Елемент з індексом " << i << " має значення " << mas[i] << endl;
    }
    // Сортування масиву бульбашкою
    int x = 0;
    for (int i = size - 1; i >= x; i) // ось тут і була помилка
    {
        for (int j = size - 1; j >= x; j--)    {
            if (mas[j] < mas[j-1])    {
                tmp = mas[j];
                mas[j] = mas[j-1];
                mas[j-1] = tmp;
                cout << "елемент " << j << " помінявся з елементом " << j - 1 << " << " << endl; // наводка
                                    }

                                            }
        x++;
    }
    // виведення відсортованого масиву
    cout << "Виведення відсортованого масиву" << endl;
    for (int i = 0; i < size; i++){
        cout << "Елемент з індексом " << i << " має значення " << mas[i] << endl;
    }
    system("pause");
    return 0;
}

7

Re: Сортування бульбашкою

Мадярський танок вам у поміч
https://www.youtube.com/watch?v=lyZQPjUT5B4

Подякували: marketesh1

8

Re: Сортування бульбашкою

marketesh написав:
quez написав:
marketesh написав:

та це я в курсі, але ж хочеться зробити типу такого: якщо одиниця, яка знаходиться у mas[4] є найменшим числом, і вона виплила на першу позицію, тобто mas[0], то щоб надалі mas[0] вже не сканувався для сортування.
Логічно? Чи то мої прибамбаси такі не нормальні? :)

Тоді треба прибрати i--, бо ви за один прохід зменшуєте масив, який сортується, на два елемента: з одної сторони і з іншої. Перший елемент найменший, а останній — як пощастить.

Дякую!!! Чесно скажу, не знав, що можна просто написати "i"  і воно прийметься. Ще раз дякую :)

О сколько нам открьітий чудньіх готовит просвещенья дух

Більше того — ви завжди можете пропустити будь-який стейтмент в оголошенні циклу for і навіть написати for(;;), пропустивши всі.

9

Re: Сортування бульбашкою

А відеоролик класний, дітям можна легко продемонструвати :) Круть