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

Правильно ли сделано. Быстрая сортировка - C++

Восстановить пароль Регистрация
 
Fareiro
15 / 15 / 1
Регистрация: 06.12.2012
Сообщений: 130
20.10.2013, 23:52     Правильно ли сделано. Быстрая сортировка #1
Всем добрый вечер. Собственно вопрос. Правильно ли будет так вести подсчет количества операций сортировки?
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
int nsort = 0;
void sort(int *mas, int i, int j)
{
    int c, x, m, k;
    m = i; k = j;
    c = mas[(m + k) / 2]; // центральный элемент
    do
    {
        nsort++;
        // процедура разделения
        while (mas[m] < c) {m++; nsort++;}
        while (mas[k] > c) {k--;  nsort++;}
        if (m <= k)
        {
            nsort++;
            x = mas[m];
            mas[m] = mas[k];
            mas[k] = x;
            m++;
            k--;
        }
    } while (m < k);
    // рекурсивные вызовы, если есть что сортировать
    if (i < k){
        sort(mas, i, k);
    }
    if (m < j) {
        sort(mas, m, j);
    }
}
Добавлено через 4 часа 12 минут
nsort - счетчик
не ужели ни кто не знает
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.10.2013, 23:52     Правильно ли сделано. Быстрая сортировка
Посмотрите здесь:

Быстрая сортировка C++
C++ Быстрая сортировка с выбором случайного элемента
C++ Быстрая сортировка
Быстрая сортировка C++
C++ Правильно ли сделано задание
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
gng
605 / 451 / 122
Регистрация: 08.09.2013
Сообщений: 1,152
21.10.2013, 09:12     Правильно ли сделано. Быстрая сортировка #2
Если под операцией сортировки понимать перестановку элементов, то, очевидно, нет.
Ваша программа уже для массива {1,2} выдаст одну операцию, а для {2,1} - целых две.
Достаточно оставить один nsort++; внитри if
Fareiro
15 / 15 / 1
Регистрация: 06.12.2012
Сообщений: 130
21.10.2013, 10:08  [ТС]     Правильно ли сделано. Быстрая сортировка #3
Колво. операций для массива {1,2} - 3
Для {2,1} - 2
Что-то здесь не так

Нужно "вычислить количество произведенных сравнений между элементами массива".
gng
605 / 451 / 122
Регистрация: 08.09.2013
Сообщений: 1,152
21.10.2013, 11:01     Правильно ли сделано. Быстрая сортировка #4
Цитата Сообщение от Fareiro Посмотреть сообщение
Нужно "вычислить количество произведенных сравнений между элементами массива"
Тогда при каждом сравнении элементов приплюсовываете единицу к счетчику. Сравнения элементов массива у вас только в двух идущих подряд while.
Для каждого while количество сравнений = количесво проходов цикла + 1.
Yandex
Объявления
21.10.2013, 11:01     Правильно ли сделано. Быстрая сортировка
Ответ Создать тему
Опции темы

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