Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
0 / 0 / 0
Регистрация: 26.08.2013
Сообщений: 65

Сравнить сортировку пузырьком с сортировкой подсчетом

08.12.2014, 14:50. Показов 1560. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нужно написать который бы сравнивал сортировку пузырьком с сортировкой подсчетом. Нужно вычислить время выполнения и т. д. и т. п.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
08.12.2014, 14:50
Ответы с готовыми решениями:

Сортировку вставками меняем на Пирамидальную сортировку и на Сортировку подсчётом
Здравствуйте. Я не как не могу разобраться.Помогите. У меня есть листинг сортировки вставками: #include "stdafx.h" ...

Заменить сортировку вставками сортировкой пузырьком
Есть решение задачи, где я хочу заменить сортировку вставками сортировкой пузырьком. Написал так: program main; //True -...

проблемы с сортировкой пузырьком
собственно сабж проблема заключается в том, что программа сортирует ЧАСТЬ массива. Допустим, надо отсортировать каждый столбец по...

8
91 / 74 / 81
Регистрация: 07.12.2014
Сообщений: 303
08.12.2014, 15:02
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
45
46
47
48
49
50
#include< iostream >
#include <ctime> 
#include <iomanip>
using namespace std;
void InsertSort(int k, int x[])
{
    srand(time(0));
    int i, j, temp;
    for (i = 0; i<k; i++)
    {
        //цикл проходов, i - номер прохода 
        temp = x[i]; //поиск места элемента 
        for (j = i - 1; j >= 0 && x[j]>temp; j--)
            x[j + 1] = x[j];
        //сдвигаем элемент вправо, пока не дошли
        //место найдено, вставить элемент 
        x[j + 1] = temp;
    }
    cout << "InsertSort" << endl;
    for (i = 0; i < k; i++)
        cout << x[i] << setw(5);
 
    cout << endl<<"runtime = " << clock() / 1000.0 << endl;
}
void BubbleSort(int k, int x[])
{
    srand(time(0));
    int i, j, buf;
    for (i = k - 1; i>0; i--)
        for (j = 0; j<i; j++)
            if (x[j]>x[j + 1])
            {
        buf = x[j];
        x[j] = x[j + 1];
        x[j + 1] = buf;
            }
    cout << "BubbleSort" << endl;
    for (i = 0; i < k; i++)
        cout << x[i] << setw(5);
    cout << endl << "runtime = " << clock() / 1000.0 << endl;
}
 
void main()
{
    int a[10] = {20,40,60,10,0,50,100,90,80,70};
    InsertSort(10, a);
    BubbleSort(10, a);
 
    system("pause");
}
0
0 / 0 / 0
Регистрация: 26.08.2013
Сообщений: 65
08.12.2014, 15:12  [ТС]
...

Добавлено через 8 минут
olgashat, спасибо конечно, но мне надо сравнить сортировку подсчетом с пузырьком.
0
91 / 74 / 81
Регистрация: 07.12.2014
Сообщений: 303
08.12.2014, 15:35
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
45
46
47
48
49
50
#include< iostream >
#include <ctime> 
#include <iomanip>
using namespace std;
void counting_sort( int k,int x[] ) 
{
    srand(time(0));
    int min = 0, max = 9;
 
    int c[10];
 
    for (int i = min; i <= max; ++i) c[i - min] = 0;
    for (int i = 0; i < k; ++i) ++c[x[i] - min];
 
    for (int i = min; i <= max; ++i)
        for (int j = c[i - min]; j--;)
            x[i] = i;
    cout << "counting_sort" << endl;
    for (int i = 0; i < k; i++)
        cout << x[i] << setw(5);
 
    cout << endl << "runtime = " << clock() / 1000.0 << endl;
}
 
void BubbleSort(int k, int x[])
{
    srand(time(0));
    int i, j, buf;
    for (i = k - 1; i>0; i--)
        for (j = 0; j<i; j++)
            if (x[j]>x[j + 1])
            {
        buf = x[j];
        x[j] = x[j + 1];
        x[j + 1] = buf;
            }
    cout << "BubbleSort" << endl;
    for (i = 0; i < k; i++)
        cout << x[i] << setw(5);
    cout << endl << "runtime = " << clock() / 1000.0 << endl;
}
 
void main()
{
    int a[10] = {1,0,4,5,2,9,7,8,6,3};
    
    BubbleSort(10, a);
    counting_sort(10, a);
    system("pause");
}
1
Guardian of Asgaard
377 / 319 / 197
Регистрация: 11.11.2013
Сообщений: 1,046
08.12.2014, 15:49
На 10 элементах разницы никакой не будет заметно. Нужно хотя бы от нескольких сотен тысяч элементов, а более явно это будет видно на миллионе. Так как требуется подсчитать время только сортировки, то для этого необходимо:
1. Нарандомить 1 млн чисел от 1 до 100 и записать их в файл.
2. Произвести сортировку в файле.
Функция вывода времени в Visual Studio не будет отображать точное время выполнения, лучше использовать тот же minGW, в консоле при компиляции достаточно дописать просто time, чтобы узнать время сортировки.
1
0 / 0 / 0
Регистрация: 26.08.2013
Сообщений: 65
09.12.2014, 16:28  [ТС]
Darkrduk, можешь пожалуйста написать код. А то у меня ничего не получается. Точнее получается вроде как но сильно коряво.
0
Guardian of Asgaard
377 / 319 / 197
Регистрация: 11.11.2013
Сообщений: 1,046
09.12.2014, 16:34
Цитата Сообщение от luhan Посмотреть сообщение
можешь пожалуйста написать код. А то у меня ничего не получается. Точнее получается вроде как но сильно коряво.
Сегодня вечером/ночью сделаю.
1
0 / 0 / 0
Регистрация: 26.08.2013
Сообщений: 65
09.12.2014, 16:56  [ТС]
Darkrduk, ok
0
Guardian of Asgaard
377 / 319 / 197
Регистрация: 11.11.2013
Сообщений: 1,046
09.12.2014, 22:14
Лучший ответ Сообщение было отмечено luhan как решение

Решение

Можно сгенерировать числа сразу в массив, но, например для 50000 элементов это занимает 0.42 секунды, в то время как считывание чисел из файла в массив составляет 0.25 секунды, соответственно чем больше чисел, тем дольше будет генерация, поэтому будем считывать их из файла. С 1 миллионом я погарячился, я устал ждать пока пузырёк их отсортирует и отменил.
П.С.
Для сравнения, bubbleSort 50000 элементов у меня занимает 10 секунд, в то время как insertSort только 2,5 секунды.
скрин

1) Генерация 50000 чисел в файл:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <fstream>
 
int main() {
    int value;
    
    std::fstream output;
    
    output.open ("in.txt", std::fstream::out );
    
    srand(time(NULL));
    
    for ( int i = 0; i < 50000; i++ ) {
        value = rand() % 100;
        output << value << " ";
    }
    
    output.close();
    
    return 0;
}
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#include <iostream>
#include <cstdlib>
#include <fstream>
 
void bubbleSort(int array[], int size) {
    int last = size - 1;
    
    for ( int i = 0; i < last; i++ ) {
        int limit = last - i;
        
        for ( int j = 0; j < limit; j++ ) {
            int next = j + 1;
            
            if ( array[j] > array[next] ) {
                int temp = array[j];
                
                array[j] = array[next];
                array[next] = temp;
            }
        }
    }
}
 
void insertSort(int array[], int len) {
    for ( int i = 1; i < len; i++ ) {
        int j = i;
        int temp = array[i];
        
        for ( int prev = j - 1; j > 0 && temp < array[prev]; j--, prev-- ) {
            array[j] = array[prev];
        }
        array[j] = temp;
    }
}
 
int main() {
    const int size = 50000;
    int array[size];
    
    std::fstream input;
    std::fstream output;
    
    input.open("in.txt", std::fstream::in);
    output.open("out.txt", std::fstream::out);
    
    for ( int i = 0; i < size; i++ ) {
        input >> array[i];
    }
    input.close();
    
    bubbleSort(array, size);
    
    for ( int i = 0; i < size; i++ ) {
        output << array[i] << " ";
    }
    output.close();
    
    return 0;
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
09.12.2014, 22:14
Помогаю со студенческими работами здесь

Отсортировать строки матрицы по возрастанию сортировкой подсчетом
В файле содержится двумерный массив размерностью n на n. В новый файл вывести отсортированный массив. Отсортировать строки по возрастанию...

Сравнить сортировку Шелла и сортировку с помощью прямого включения
Хотел бы узнать как можно написать код который будет сравнивать сортировку Шелла и сортировка с помощью прямого включения на C++ builder6....

Отсортировать массив структур по возрастанию сортировкой подсчётом по полю Year
Есть структура: struct str { string Name; string Brand; int Year; }; Создано 1000 экземпляров для работы с ними. Как...

Отсортировать пузырьком вставками и своей сортировкой массив
Разработать приложение демонстрирующее работу с одномерный массивом, заполнение массива на форме DateGridView. Отсортировать пузырьком...

Исправить сортировку подсчетом
Всем привет! Есть программа сортировки подсчетом #include &lt;fstream&gt; #include &lt;iostream&gt; using namespace std; int a; ...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru