Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
strange_man
10 / 10 / 0
Регистрация: 17.05.2012
Сообщений: 118
#1

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

17.11.2012, 22:19. Просмотров 797. Ответов 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); // рекурсивный вызов. 
    }
    //а базовой фазы здесь не будет, верно?
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.11.2012, 22:19
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Сортировка выборкой. Рекурсивный метод (C++):

Сортировка выборкой - C++
В книге упражнение сделать сортировку выборкой. Сортировка получается , только почему то появляется еще одно число. Не пойму откуда оно...

Сортировка выборкой - C++
Задача: Сортировка выборкой анализирует массив, отыскивая наименьший элемент массива. Затем этот наименьший элемент обменивается местами...

Рекурсивный метод - C++
Возможно, кто-то уже решал такую задачу как подпрограмму, или еще где. А, может, кто-то сходу видит, как это сделать. Динамическим...

Рекурсивный и итеративный метод - C++
помогите пожалуйста написать программу для итеративного способа вычисления. нужно вычислить элементы последовательности a(n) = a(n...

Рекурсивный метод вычисления определителя матрицы - C++
суть в том, что не получается реализовать рекурсивный метод Determinant в классе Matrix. #include &lt;iostream&gt; using namespace std; ...

сортировка не рекурсивный вариант если можно. с++ - C++
Сама задача: Получить сумму двух длинных натуральных чисел Каждое число и результат представлены линейными односвязными списками...

1
NEbO
588 / 455 / 49
Регистрация: 22.01.2009
Сообщений: 1,180
Записей в блоге: 1
Завершенные тесты: 2
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% правильно понял алгоритм, но суть такая
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.11.2012, 23:40
Привет! Вот еще темы с ответами:

Рекурсивный метод для вывода на экран последовательности - C++
Дано натуральное число n. Разработать рекурсивный метод для вывода на экран следующей последовательности чисел: 1 2 2 3 3 3 ...

Разработать рекурсивный метод для вывода символами треугольника - C++
****** ***** **** *** ... * Рекурсия обязательна.Помогите пжс

Рекурсивный метод, выводящий все возможные разложения натурального числа n на множители - C++
Разработать рекурсивный метод для вывода на экран всех возможных разложений натурального числа n на множители (без повторений). Например,...

Сортировка, метод шелла - C++
Всем доброй ночи, задача, дан список студентов и у каждого 5 оценок, отсортировать сумму оценок по убыванию и данные в новый файл, вот мой...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru