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

Сортировка выборкой. Рекурсивный метод - C++

Восстановить пароль Регистрация
 
strange_man
 Аватар для strange_man
9 / 9 / 0
Регистрация: 17.05.2012
Сообщений: 117
17.11.2012, 22:19     Сортировка выборкой. Рекурсивный метод #1
Код моей функции, но он мне не нравится из-за трех переменных. Ненавижу что-то добавлять. Так как по заданию мне нужно было начинать с начала а не с конца, то пришлось ее ввести. Проверьте, пожалуйста.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void selectionSort (int numbers[], int n, int n0) //принимает такие аргументы: массив для последующей сортировки, количество элементов для сортировки, общее количество элементов массива
{
    if (n > 1)
    {
        int min = n0 - n; //предполагаемый минимальный элемент
 
        //нахождение минимального элемента
        for (int i = n0 - n; i < n0; i++)
            if (numbers[i] < numbers[min])
                min = i;
 
        //ставим наименьший элемент в начало
        int temp = numbers[n0 - n];
        numbers[n0 - n] = numbers[min];
        numbers[min] = temp;
 
        selectionSort (numbers, n-1, n0); // рекурсивный вызов. 
    }
    //а базовой фазы здесь не будет, верно?
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.11.2012, 22:19     Сортировка выборкой. Рекурсивный метод
Посмотрите здесь:

Рекурсивный метод для вывода на экран последовательности C++
Рекурсивный метод C++
сортировка (метод прямого выбора) C++
Рекурсивный и итеративный метод C++
C++ сортировка не рекурсивный вариант если можно. с++
C++ Сортировка, метод шелла
Сортировка выборкой C++
Сортировка выборкой C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
NEbO
583 / 451 / 49
Регистрация: 22.01.2009
Сообщений: 1,173
Записей в блоге: 1
Завершенные тесты: 1
17.11.2012, 23:40     Сортировка выборкой. Рекурсивный метод #2
нормального выхода нет, разве что попытаться внести статические переменные (именно попытаться, если честно, не уверен, что получится), ну а если на то пошло -- то глобальные. кстати, учтя что при первом вызове, как я понимаю n=n0, должен прокатить такой вариант:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void selectionSort (int numbers[], int n) //принимает такие аргументы: массив для последующей сортировки, количество элементов для сортировки, общее количество элементов массива
{
    static int n0 = n;
    if (n > 1)
    {
        int min = n0 - n; //предполагаемый минимальный элемент
 
        //нахождение минимального элемента
        for (int i = n0 - n; i < n0; i++)
            if (numbers[i] < numbers[min])
                min = i;
 
        //ставим наименьший элемент в начало
        int temp = numbers[n0 - n];
        numbers[n0 - n] = numbers[min];
        numbers[min] = temp;
 
        selectionSort (numbers, n-1); // рекурсивный вызов. 
    }
    //а базовой фазы здесь не будет, верно?
}
ну а еще можно переменные numbers и n сделать глобальными, чтобы вдруг стек не переполнился.
пс. задача замечательная для темы "рекурсия" в универе. как-то помогал знакомым сделать рекурсивным обход списка(!!!) немало помучались, помнится... скоро, видимо, пойдут вычисления среднего арифметического через рекурсию и суммы элементов матриц. ох и тяжко придется лет эдак через 5 учиться. нам же, слава богу, перед этим деревья показали, поэтому было что-то более приближенное к реальности.
впрочем, если нужна рекурсия, предлагаю еще такой вариант:
C++
1
2
3
4
5
6
7
8
9
10
11
12
void selectionSort (int numbers[], int n) {
    if (0) selectionSort(numbers, n-1); //  n-1 -- это чтоб было условие выхода из рекурсии. кудаж без него!
    for (int i = 0; i < n; i++) {
        for (int j = i + 1; j < n; j++) {
            if (numbers[i] < numbers[j]) {
                int tmp = numbers[i];
                numbers[i] = numbers[j];
                numbers[j] = tmp;
            }
        }
    }
}
Добавлено через 1 минуту
не уверен, что 100% правильно понял алгоритм, но суть такая
Yandex
Объявления
17.11.2012, 23:40     Сортировка выборкой. Рекурсивный метод
Ответ Создать тему
Опции темы

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