Сортировка пузырьком с++

Тема в разделе "Общие вопросы по С и С++", создана пользователем FroLe, 19 дек 2010.

  1. FroLe

    FroLe Гость

    Сортировка пузырьком, все работает, но помогите поменять ввод цифр в ручную на ввод цифр рандома (от -100 до +100).
    Код (Text):
    #include <iostream>
    using namespace std;
    // наш массив
    int array[100];
    // сортировка
    void*Sort(int col)
    {
    // временная переменная для хранения промежуточного результата
    int trash=0;
    // пока не равно количеству елементов
    for (int i=1; i<=col; 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 << " Enter length of array"<< endl;
    // считываем количество элементов
    cin >> col_el;
    // считываем элементы массива
    for (int n=1; n<=col_el; n++)
    cin >> array[n];
    Sort(col_el);
    // сортируем их
    cout << "Result is :"<<endl;
    // и выводим
    Out(col_el);
    // ждем нажатия клавиши
    cin >> col_el;
    return 0;
    }
     
  2. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    Код (C++):
    #include <stdlib.h>

    ...

    int main()
    {
    for ( int i = 0; i < 100; i++ ) {
    array[i] = rand() % 200 - 100;
    }

    Sort(col_el);
    // сортируем их
    cout << "Result is :"<<endl;
    // и выводим
    Out(col_el);
    // ждем нажатия клавиши
    cin >> col_el;
    return 0;
    }
     
  3. ermackprogramis

    ermackprogramis Гость

    Если я правильно понял что бы вводимые элементы генерировальсь сами.Если да то попробу так:
    Подключи эти две:
    Код (C++):
     
    #include <stdlib.h>
    #include <time.h>
    Код (C++):
     
    и потом это:
    Код (C++):
     
    //инициализировать генератор псевдослучайных чисел
    srand((unsigned)(time(NULL)));
    for(int i=0;i<n;i++) //генерировать массив
    {
    arr=rand()%30; // имя твоего масива,%30 в скольких десятках будет числа брать
    }
    Код (C++):
     
    Вроде так,если что не так извини я пока новенький в этом.
     
  4. FroLe

    FroLe Гость

    спс lazybiz
    мне одногрупник почти также подсказал))

    Код (C++):
     srand(1000);
    for (int n=1; n<=col_el; n++)
    {
    array[n]=rand()%201-100;
    cout << array[n] <<' ';
    }
     
  5. FroLe

    FroLe Гость

    а сложно будет разпарелелить такую программу в несколько потоков? с помощью библиотеки pthreads) кто поможет?))
     
  6. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    FroLe
    А смысл? Что тут с чем распараллеливать?
     
  7. Rififi

    Rififi Гость

    FroLe

    а сложно будет разпарелелить такую программу в несколько потоков?

    в принципе, внутренние циклы можно было бы выполнять параллельно, хотя смысла в этом никакого нет. ну если только препода ублажить.
     
  8. FroLe

    FroLe Гость

    ну да превода ублажить нужно, он хотит что бы 1 поток сортировал с -100 до 0 , второй поток сортировал с 1 до 100, а в главном потоке идет ввод и вывод данных
     
  9. Rififi

    Rififi Гость

    FroLe


    он хотит что бы 1 поток сортировал с -100 до 0 , второй поток сортировал с 1 до 100

    он что, умом тронулся, на почве чрезмерного употребления алкоголе-содержащих напитков в преддверие праздников? ((:)
    как мы можем сортировать в каком-то диапазоне, если входные данные - случайны???

    максимум что можно сделать - при начальной генерации чисел определить диапазон и распихать их по двум массивам. и сортировать их, а потом слить.
     
  10. FroLe

    FroLe Гость

    ну может я чето не так понял )) может и действительно нужно сделать так как говоришь....
     
  11. eReS

    eReS Гость

    ну теоретически заполнение массива рандомными числами можно разпаралелить :)
    например в одном потоке заполнять парные числа, в другом непарные.
     
  12. dreamer

    dreamer Гость

    При больших массивах в самом деле было бы очень кстати распараллелить сортировку подмассивов. Потом всё собирается в один массив через нахождение минимального (или максимального) элемента по указателям, последовательно перемещаемым вперёд по подмассивам.
     
  13. eReS

    eReS Гость

    не понимаю как реализовать такое :ya_lamo: опишите словами алгоритм, если не сложно
     
  14. dreamer

    dreamer Гость

    Допустим, есть массив из чисел 19 3 1 44 7 0 56 1 1 3 11 6. Разобьём сортировку на 3 потока (т.е. сортируем 3 подмассива). После этого получится: 1 3 19 44 0 1 7 56 1 3 6 11. Ставим указатели на каждый из подмассивов. Первый вначале будет указывать на 1, второй на 0, третий на 1. Сравниваем, минимальным оказывается 0. Переносим его в результирующий массив, а соответствующий указатель увеличиваем. Получается опять три числа: 1 1 1. Тут берём любое, например, первое число (ибо все равны), заносим в результирующий массив и увеличиваем первый указатель. Получается 3 1 1. И так далее. После чего в результирующем массиве будет отсортированный исходный массив.

    Только при этом нужно проверять, не стоит ли указатель за границами своего подмассива.
     
Загрузка...
Похожие Темы - Сортировка пузырьком с++
  1. Liori
    Ответов:
    2
    Просмотров:
    1.007
  2. vera2014
    Ответов:
    0
    Просмотров:
    1.075
  3. FCDK
    Ответов:
    0
    Просмотров:
    1.266
  4. ленарано
    Ответов:
    1
    Просмотров:
    1.105
  5. Creder
    Ответов:
    0
    Просмотров:
    1.349

Поделиться этой страницей