Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
kimki
0 / 0 / 0
Регистрация: 25.04.2014
Сообщений: 9
#1

Сортировка пузырьком. Исправить код - C++

29.04.2014, 15:49. Просмотров 289. Ответов 11
Метки нет (Все метки)

Подскажите пжл. в чем ошибка, что не так написано, не хочет сортировать(( числа рандомно присваивает и на этом собственно все((

Хотелось бы что бы он вначале присваивал рандомно значения, а потом отсортировывал их, по возрастанию или убыванию...

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
const int n = 4;
    int a[n];
 
    for (int i(0); i < 4; i++)
    {
        a[n] = rand() % 100;
        cout << "a[" << n << "]" << " = " << a[n] << endl;
        for (int j(0); j < i; j++)
        {
            if (a[j] > a[j + 1])
            {
                double tmp = a[j];
                a[j] = a[j+1];
                a[j+1] = tmp;
            }
        }
    }
    cout << "a[" << n << "]" << " = " << a[n] << endl;
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Леонид Каруна
0 / 0 / 0
Регистрация: 14.04.2013
Сообщений: 148
29.04.2014, 16:16     Сортировка пузырьком. Исправить код #2
Вот я когда-то писал, рабочий)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include <iostream>
#include <ctime>
using namespace std;
 
void Sort(int[],int);
 
void main()
{
    setlocale(LC_ALL,"rus");
    srand(time(0));
    const int size=10;
    int mas[size];
    for(int i=0; i<10; i++)
    {
        mas[i]=rand()%30+1;
        cout<<mas[i]<<" ";
    }
    cout<<endl;
    Sort(mas,size);
    for(int i=0; i<10; i++)
    {
        cout<<mas[i]<<" ";
    }
    cout<<endl;
    system("pause");
}
 
//***********************************
void Sort(int mas[],int size)
{
    int i,j,x;// i,j - 2 счетчика, x - сохраняет значение.
    for(i=0; i<size; i++)
    {
        for(j=size-1; j>i; j--)
        {
            if(mas[j-1]>mas[j])
            {
                x=mas[j-1];
                mas[j-1]=mas[j];
                mas[j]=x;
            }
        }
    }
}
Supernatural
285 / 141 / 28
Регистрация: 22.11.2010
Сообщений: 1,461
29.04.2014, 16:30     Сортировка пузырьком. Исправить код #3
если интересно
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 for (int i=0; i < 4; i++)
    {
        a[i] = rand() % 100; //текущему элементу присваиваем случайное значение до 100
        cout << "a[" << i << "]" << " = " << a[i] << endl;//вывод текущего элемента и переход на новую строку
    }
 for (int j=0; j < n; j++)         //сортировка массива      
        {
            if (a[j] > a[j + 1])
            {
                int tmp = a[j]; //объявляем целую переменную для обмена элементами
                a[j] = a[j+1];
                a[j+1] = tmp;
            }
        }
    for (int i=0; i < 4; i++) //вывод массива
    cout << "a[" << i << "]" << " = " << a[i] << endl;
Тамика
Котовчанин
 Аватар для Тамика
866 / 446 / 132
Регистрация: 16.02.2010
Сообщений: 2,659
Записей в блоге: 27
29.04.2014, 16:36     Сортировка пузырьком. Исправить код #4
Ну и я примажусь уже...
Только я через вектор творила эту вещь.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <iostream>
#include <vector>
 
void bubble_sort(std::vector <int>& vec)
{
    int count = 0, temp = 0;
    for (int i = 0; i < vec.size() - 1 ; ++ i)
    {
        if (vec[i + 1] < vec[i])
        {
            temp = vec[i];
            vec[i] = vec[i + 1];
            vec[i + 1] = temp;
            count ++;
        }
    }
    if (count != 0)
        bubble_sort(vec);
}
 
void main()
{
    std::vector <int> v;
    for (int i = 0; i < 20; ++ i)
    {
        v.push_back(rand()%20);
        std::cout << v[i] << " ";
    }
    bubble_sort(v);
    std::cout << std::endl;
    for (int i = 0; i < 20; ++ i)
    {
        std::cout << v[i] << " ";
    }
    system("pause");
}
Добавлено через 2 минуты
C++
1
[QUOTE]a[n] = rand() % 100;[/QUOTE]
У Вас же n не изменяется...
Как так-то?
cooller
 Аватар для cooller
564 / 532 / 120
Регистрация: 25.12.2013
Сообщений: 1,456
29.04.2014, 16:42     Сортировка пузырьком. Исправить код #5
Тамика, Леонид Каруна, вас попросили посмотреть код и найти ошибку, а не писать все заново
kimki,
Цитата Сообщение от kimki Посмотреть сообщение
a[n] = rand() % 100;
ты присваиваешь рандомное число вообще в никуда. Последний элемент массива - n - 1, да и даже если так ты будешь все время присваивать последнему элементу
перед сортировкой, сделай отдельный циклы для заполнения, но заполняй не nй элемент, а iй
ValeryS
Модератор
6446 / 4912 / 451
Регистрация: 14.02.2011
Сообщений: 16,283
29.04.2014, 16:56     Сортировка пузырьком. Исправить код #6
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от kimki Посмотреть сообщение
Подскажите пжл. в чем ошибка, что не так написано, не хочет сортировать
вот здесь
Цитата Сообщение от Supernatural Посмотреть сообщение
C++
1
2
3
for (int j(0); j < i; j++)
        {
            if (a[j] > a[j + 1])
ошибка в алгоритме
Supernatural, та же ошибка
Цитата Сообщение от Supernatural Посмотреть сообщение
C++
1
2
3
4
for (int j=0; j < n; j++)         //сортировка массива      
        {
            if (a[j] > a[j + 1])
            {
при сортировке пузырьком, а равно камушком, должно быть
C++
1
два
цикла вложенные один в другой

смотри например массив
321
сравниваем 3 и 2, меняем местами получаем 2 3 1
сравниваем 3 и 1 , меняем местами получаем 2 1 3
и вот здесь ваш алгоритм заканчивается
но нужно еще отсортировать массив(подмассив) 2 1
для этого нужен еще один цикл
если не решишь то могу накидать рыбу но лучше сам
Тамика
Котовчанин
 Аватар для Тамика
866 / 446 / 132
Регистрация: 16.02.2010
Сообщений: 2,659
Записей в блоге: 27
29.04.2014, 17:02     Сортировка пузырьком. Исправить код #7
Цитата Сообщение от cooller Посмотреть сообщение
Тамика, Леонид Каруна, вас попросили посмотреть код и найти ошибку, а не писать все заново
И что? Учиться анализировать плохо что ли? Да и я указала на возможную ошибку.
И тут не работники форума сидят, а люди, у которых есть свои дела. Вот и кинули готовенькое, что было когда-то, дабы не тратить время. А ТС мог бы и разобраться.
ValeryS
Модератор
6446 / 4912 / 451
Регистрация: 14.02.2011
Сообщений: 16,283
29.04.2014, 17:14     Сортировка пузырьком. Исправить код #8
еще одну ошибку нашел
Цитата Сообщение от kimki Посмотреть сообщение
int a[n];
Цитата Сообщение от kimki Посмотреть сообщение
double tmp = a[j];
Это как????
kimki
0 / 0 / 0
Регистрация: 25.04.2014
Сообщений: 9
29.04.2014, 17:55  [ТС]     Сортировка пузырьком. Исправить код #9
Спасибо всем кто откликнулся и решил помочь))но честно я так ничего и не понял где у меня ошибка((. За другие скрипты конечно спасибо, но их и гугл выдает, а меня интересует именно через цикл фор с рандомом ввода чисел и последующей сортировкой.
ValeryS Если не сложно поправь мой вариант до рабочего,если это возможно. Заранее большое спасибо.
ValeryS
Модератор
6446 / 4912 / 451
Регистрация: 14.02.2011
Сообщений: 16,283
29.04.2014, 18:02     Сортировка пузырьком. Исправить код #10
Цитата Сообщение от kimki Посмотреть сообщение
Если не сложно поправь мой вариант до рабочего,если это возможно.
проще заново переписать
сортировку выведи в отдельную функцию
и посмотри как реализовал Леонид Каруна,

Добавлено через 2 минуты
Цитата Сообщение от kimki Посмотреть сообщение
именно через цикл фор с рандомом ввода чисел и последующей сортировкой.
с последующей!!!!
т.е сначала в одном цикле вводишь
а потом двумя вложенными циклами сортируешь
а так ты вводишь одно число и тут же пытаешься сортировать массив, который еще не заполнен
kimki
0 / 0 / 0
Регистрация: 25.04.2014
Сообщений: 9
29.04.2014, 18:43  [ТС]     Сортировка пузырьком. Исправить код #11
Да, спасибо дошло, но не догоняю почему там не работает по идеи один цикл раздает числа, второй сортирует...

а на деле еще два цикла добавлять надо((

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
const int n = 4;
    int a[n];
 
    for (int i(0); i < 4; i++)
    {
        a[i] = rand() % 100;
        cout << "a[" << i << "]" << " = " << a[i] << endl;
    }
    
    cin.get();
    system("cls");
 
    for (int i=n-1; i > 0; i--)
    for (int j(0); j < i; j++)
    {
        if (a[j] > a[j + 1])
        {
            int tmp = a[j];
            a[j] = a[j + 1];
            a[j + 1] = tmp;
        }
    }
    for (int i(0); i < n; i++)
    {
        cout << "a[" << i << "]" << " = " << a[i] << endl;
    }
может можно как то сократить??? только именно в таком варианте))
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.05.2014, 17:09     Сортировка пузырьком. Исправить код
Еще ссылки по теме:

Сортировка пузырьком C++
C++ Отсортировать столбцы в массиве по уменьшению сумм четных чисел. Сортировка выбором. Исправить код
C++ Пузырьковая сортировка - исправить код
Сортировка пузырьком C++
сортировка пузырьком C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
deadlinishe
 Аватар для deadlinishe
7 / 7 / 1
Регистрация: 03.05.2014
Сообщений: 143
05.05.2014, 17:09     Сортировка пузырьком. Исправить код #12
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <iostream>
using namespace std;
int array[100];
void*Sort(int col) 
{
    int trash=0;
 
    for (int i=1; i<=col ; i++)
    {
 
        for (int j=1; j<=col-i; j++) 
        {
 
            if (array [j]>array [j+1]) 
            {
 
                trash=array[j]; 
                array [j]=array [j+1];
                array [j+1]=trash;
            }
        }
    }
}
 
void*Out(int col)
{
    for (int i=1; i<=col; i++) 
    cout << array [i] <<" ";
    cout << endl; 
}
int main()
{
    int col_el;
    cout << " Vvedite dlinnu masiva"<< endl;
    cin >> col_el;
    for (int n=1; n<=col_el ; n++)
    cin >> array[n];
    Sort(col_el);
    cout << "Resultat:"<<endl;
    Out(col_el);
    cin >> col_el;
    return 0;
}
Yandex
Объявления
05.05.2014, 17:09     Сортировка пузырьком. Исправить код
Ответ Создать тему
Опции темы

Текущее время: 00:58. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru