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

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

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

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

29.04.2014, 15:49. Просмотров 302. Ответов 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)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.04.2014, 15:49
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Сортировка пузырьком. Исправить код (C++):

Сортировка (исправить код) - C++
Помогите с сортировкой! Нужно сортировать исходные данные по убыванию!! Простой массив сортировать могу, а тут никак не получается)...

Сортировка (исправить код) - C++
Нужно упорядочить записи по алфавиту, но у меня только меняет местами name! Помогите исправить код! #include &lt;iostream&gt; #include...

сортировка массива (исправить код) - C++
Нужно отсортировать массив по убыванию bals, но даже не компилируется! #include &lt;iostream&gt; #include &lt;iomanip.h&gt; using namespace...

Пузырьковая сортировка - исправить код - C++
У меня есть массив unsigned char *buffer = new unsigned char. И мне нужно реализовать пузырьковую сортировку (сравниваются значения...

Сортировка по алфавиту (исправить код) - C++
Помогите отсортировать структуру по алфавиту (сортировка по tabl.name)! У меня ошибку выдает (( #include &lt;iostream&gt; #include &lt;string.h&gt;...

Отсортировать столбцы в массиве по уменьшению сумм четных чисел. Сортировка выбором. Исправить код - C++
Задача: Задать двумерный массив целых чисел m=5, n=6. Отсортировать столбцы в массиве по упаданию сум парных чисел. Сортировка выбором....

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Леонид Каруна
0 / 0 / 0
Регистрация: 14.04.2013
Сообщений: 153
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
287 / 143 / 28
Регистрация: 22.11.2010
Сообщений: 1,502
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;
Тамика
Котовчанин
870 / 450 / 143
Регистрация: 16.02.2010
Сообщений: 2,961
Записей в блоге: 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
565 / 533 / 120
Регистрация: 25.12.2013
Сообщений: 1,456
29.04.2014, 16:42 #5
Тамика, Леонид Каруна, вас попросили посмотреть код и найти ошибку, а не писать все заново
kimki,
Цитата Сообщение от kimki Посмотреть сообщение
a[n] = rand() % 100;
ты присваиваешь рандомное число вообще в никуда. Последний элемент массива - n - 1, да и даже если так ты будешь все время присваивать последнему элементу
перед сортировкой, сделай отдельный циклы для заполнения, но заполняй не nй элемент, а iй
ValeryS
Модератор
6556 / 5022 / 464
Регистрация: 14.02.2011
Сообщений: 16,763
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
для этого нужен еще один цикл
если не решишь то могу накидать рыбу но лучше сам
Тамика
Котовчанин
870 / 450 / 143
Регистрация: 16.02.2010
Сообщений: 2,961
Записей в блоге: 27
29.04.2014, 17:02 #7
Цитата Сообщение от cooller Посмотреть сообщение
Тамика, Леонид Каруна, вас попросили посмотреть код и найти ошибку, а не писать все заново
И что? Учиться анализировать плохо что ли? Да и я указала на возможную ошибку.
И тут не работники форума сидят, а люди, у которых есть свои дела. Вот и кинули готовенькое, что было когда-то, дабы не тратить время. А ТС мог бы и разобраться.
ValeryS
Модератор
6556 / 5022 / 464
Регистрация: 14.02.2011
Сообщений: 16,763
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
Модератор
6556 / 5022 / 464
Регистрация: 14.02.2011
Сообщений: 16,763
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;
    }
может можно как то сократить??? только именно в таком варианте))
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;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.05.2014, 17:09
Привет! Вот еще темы с ответами:

Сортировка пузырьком - C++
Задача: При диспансеризации школьников определялись их рост и вес. В результате были получены массивы значений роста R(n) и веса W(n)....

Сортировка пузырьком - C++
Привет всем! У меня по методу вопросов нет, успешно отсортировал от меньшего к большему, но вот от большего к меньшему - какая-то шляпа...

Сортировка пузырьком с++ - C++
Сортировка пузырьком, все работает, но помогите поменять ввод цифр в ручную на ввод цифр рандома (от -100 до +100). #include &lt;iostream&gt; ...

Сортировка пузырьком - C++
Правильно ли организую ввод размера массива через клавиатуру?Если неправильно-то как? #include &lt;stdio.h&gt;; #include &lt;stdlib.h&gt;; ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
05.05.2014, 17:09
Ответ Создать тему
Опции темы

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