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

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

08.12.2014, 14:50. Показов 1549. Ответов 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
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru