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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Получить косинус из числа при вводе cos http://www.cyberforum.ru/cpp-beginners/thread700616.html
Как сделать чтобы я вводил cos и добывался косинус из числа #include <iostream> #include <conio.h> #include <math.h> #include <string.h> #include <stdlib.h> #define c cos; using namespace std; int main () {
C++ Получить сумму членов, принадлежащих отрезку Помогите с задачей: Даны натуральное число n,действительные числа x1..xn.В последовательности x1..xn все члены,меньше двух,заменить нулями.Кроме того,получить сумму членов,принадлежащих отрезку ,а также число таких членов. http://www.cyberforum.ru/cpp-beginners/thread700611.html
Проверка открытия файла либо работает, либо уходит в бесконечность C++
string A=Enterway('t');//функция ввода адреса файла fstream str(A.c_str(), ios::in ); for(;;){ if (!str){ cout << "ERROR!!! Файл не найден \n"; A=Enterway('t'); continue;} else break; }
C++ Бинарный файловый вывод и ввод двумерного вектора
Ребят, в общем у меня вот такой вопрос) Имеются 3 объекта класса class matrix{public:vector < vector<int> > mtx; void ch_size(int n){mtx.erase(mtx.begin(), mtx.end()); mtx.resize(n+1); for(int i=1;i<=n;i++) mtx.resize(n+1); } //функции класса и т.д.
C++ Как решать эти задачи? http://www.cyberforum.ru/cpp-beginners/thread700590.html
Получить элементы, встречающиеся в массиве не более одного раза. Массив одномерный. Большая просьба делать это с помощью простейших алгоритмов. Заранее спасибо!
C++ Заполнение символами(манипулятор) Здравствуйте! Я недавно столкнулся с проблемой заполнения строк символами. А в чем именно- допустим у меня есть строка, которая разбивается на новые строки после каждого 5ого символа, и перед этими строками еще надо заполнить символ !. cout <<"String: "; cin >> mas; for (int i=5;i<mas.length();i=i+6) mas.insert(i,"\n"); cout << setfill('!') << mas ; подробнее

Показать сообщение отдельно
NEbO
587 / 455 / 49
Регистрация: 22.01.2009
Сообщений: 1,180
Записей в блоге: 1
Завершенные тесты: 2
17.11.2012, 23:40
нормального выхода нет, разве что попытаться внести статические переменные (именно попытаться, если честно, не уверен, что получится), ну а если на то пошло -- то глобальные. кстати, учтя что при первом вызове, как я понимаю 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% правильно понял алгоритм, но суть такая
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru