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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 37, средняя оценка - 4.70
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,545
Завершенные тесты: 3
#1

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

08.08.2010, 02:47. Просмотров 5327. Ответов 26
Метки нет (Все метки)

Дичайше туплю... Нужна сортировка выборкой одномерного массива. Рекурсией. Итерацией могу сделать. Рекурсией - никак... Застопорило что-то. Буду благодарен за подсказку и помощь.

Добавлено через 6 минут
Вот обычная сортировка выбором с помощью итераций...

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
#include <iostream>
#include <ctime>
 
void selectionSort(int Arr[], int size); 
 
int main()
{
    srand(time(NULL));
    const int Size=10;
    int Arr[Size];
    for(int i=0;i<Size;++i)
        Arr[i]=1+rand()%100-1+1;
    std::cout<<"Arr is:\n";
    for(int i=0;i<Size;++i)
    {
        std::cout<<Arr[i]<<' ';
    }
    std::cout<<std::endl;
    selectionSort(Arr, Size);
    return 0;
}
 
void selectionSort(int Arr[], int size)
{
    int k=0, x=0;
    for(int i=0; i < size; i++) 
    { 
        k=i; x=Arr[i];
        for(int j=i+1; j < size; j++) 
        if (Arr[j] < x) 
        {
            k=j; x=Arr[j]; 
        }
        Arr[k] = Arr[i]; 
        Arr[i] = x;
    }
    std::cout<<"Sorted array:\n";
    for(int i=0;i<size;++i)
        std::cout<< Arr[i] <<' ';
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.08.2010, 02:47
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Сортировка выбором. Рекурсия (C++):

сортировка выбором - C++
помогите пожалуйста, алгоритм не работает то есть не сортирует #ifndef FUNC #define FUNC #include &quot;vibor.h&quot; #include &lt;vector&gt; ...

Сортировка выбором - C++
Сортировка выбором. Дана последовательность чисел а1, а2,..., аn. Требуется переставить элементы так, чтобы они были расположены по...

Сортировка выбором - C++
Добрый день, я заметил, что при сортировке массива из N элементов по алгоритму сортировки &quot;Выбором&quot;, количество смены местами элементов...

Сортировка выбором - C++
Разбираю сортировку выбором. Как реализовать сортировку по возрастанию понял, а как реализовать сортировку по возрастанию до первого...

Сортировка выбором - C++
#include &lt;iostream&gt; #include &lt;math.h&gt; #include &lt;conio.h&gt; #include &lt;cstdlib&gt; using namespace std; void SetRussianLocale() {...

сортировка выбором - C++
не могу разобраться с задачей, не разбираюсь в указателях(((: сортировка выбором символов в строке. Использовать указатели на текущий и...

26
fasked
Эксперт С++
4948 / 2528 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
08.08.2010, 03:22 #2
ну вот какую-то рекурсию присобачил
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void sort(int * a, int n)
{
   int t = 0;
   for(int i = 0; i < n; ++i)
   {
      if(a[i] < a[t])
         t = i;
   }
 
   std::swap(a[t], a[0]);
 
   if(n > 1)
      sort(a + 1, n - 1);   
      
   return;
}
Добавлено через 7 минут
Цитата Сообщение от Lavroff Посмотреть сообщение
Итерацией могу сделать. Рекурсией - никак
вообще рекурсия в принципе просто из итераций делается. просто берешь и цикл заменяешь условием, если условие выполняется, то вызываешь следующую рекурсию, если нет - возвращаешься из функции. смысл то тот же.
если хочешь можно тебе задачек еще на рекурсию напридумывать
1
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,545
Завершенные тесты: 3
08.08.2010, 03:23  [ТС] #3
fasked, Спасибо. Работает...
А про задачки... Я только за.

Не по теме:

Что-то со мной случилось в последнее время. Ничего сделать не могу. Даже элементарного... Не знаешь в чем может быть дело?

0
fasked
Эксперт С++
4948 / 2528 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
08.08.2010, 03:30 #4
Цитата Сообщение от Lavroff Посмотреть сообщение
Что-то со мной случилось в последнее время. Ничего сделать не могу. Даже элементарного...
ну тогда давай начнем с самого элементарного
найти сумму элементов массива рекурсивно.
да, и в нагрузку. пиши сразу тест к своей программе. например есть же в STL алгоритм, который тоже находит сумму элементов массива. вот ты и сравнивай результаты своей функции и STL'вского алгоритма. В результате на экране должна быть информация вида "true/false".
1
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,545
Завершенные тесты: 3
08.08.2010, 03:53  [ТС] #5
Больше всего времени ушло на поиск того как включить accumulate...

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
#include <iostream>
#include <ctime>
#include <numeric>
 
int Sum_of_el(int Arr[], int size);
 
int main()
{
    srand(time(NULL));
    const int Size=10;
    int Arr[Size];
    for(int i=0;i<Size;++i)
        Arr[i]=1+rand()%10-1+1;
    for(int i=0;i<Size;++i)
        std::cout<< Arr[i] <<' ';
    std::cout<<std::endl;
    int Sum=0;
    int AlgSum=0;
    Sum=Sum_of_el(Arr, Size);
    std::cout<< Sum <<'\n';
    AlgSum=std::accumulate(Arr, Arr+Size, AlgSum);
    std::cout<< AlgSum <<'\n';
    if(Sum==AlgSum)
        std::cout<<std::boolalpha<<true<<'\n';
    else
        std::cout<<std::boolalpha<<false<<'\n';
        return 0;
}
 
int Sum_of_el(int Arr[], int size)
{
    static int Sum=0;
    int i=size-1;
    if(i<0)
        return Sum;
    Sum+=Arr[i];
    return Sum_of_el(Arr, size-1);
}
0
fasked
Эксперт С++
4948 / 2528 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
08.08.2010, 03:58 #6
Цитата Сообщение от Lavroff Посмотреть сообщение
Больше всего времени ушло на поиск того как включить accumulate...
тоже полезно, а вот статическими переменными пользоваться нечестно!
0
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,545
Завершенные тесты: 3
08.08.2010, 04:00  [ТС] #7
Окей. Резалт аналогичный

C++
1
2
3
4
5
6
7
8
9
int Sum_of_el(int Arr[], int size)
{
    int Sum=0;
    int i=size-1;
    if(i<0)
        return Sum;
    Sum+=Arr[i];
    return Sum+Sum_of_el(Arr, size-1);
}
0
fasked
Эксперт С++
4948 / 2528 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
08.08.2010, 04:04 #8
Цитата Сообщение от Lavroff Посмотреть сообщение
Окей. Резалт аналогичный
return все же эстетичнее будет в конец вставлять. хотя это мои личные предпочтения, просто люблю, чтобы выход был в конце текста функции, а не посередь.

так. я спать пожалуй спать пойду, а чтобы ты не скучал пока. вот. рекурсивно реализовать функцию аккермана
1
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,545
Завершенные тесты: 3
08.08.2010, 04:21  [ТС] #9
Короче и красивше.

C++
1
2
3
4
5
6
7
8
9
int Sum_of_el(int Arr[], int size)
{
    int Sum=0;
    Sum+=*Arr;
    if(size==1)
        return Sum;
    else
        return Sum+Sum_of_el(Arr+1, size-1);
}
Добавлено через 12 минут
Аккер:

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
#include <iostream>
 
typedef unsigned long long U_LL;
 
U_LL Akker(U_LL n, U_LL m);
 
int main()
{
    U_LL n, m;
    std::cout<<"Enter first numb: ";
    std::cin>>m;
    std::cout<<"Enter second numb: ";
    std::cin>>n;
    std::cout <<Akker(m, n);
    return 0;
}
 
U_LL Akker(U_LL m, U_LL n)
{
    if(m==0)
        return n+1;
    else if(m>0&&n==0)
        return Akker(m-1, 1);
    else if(m>0&&n>0)
        return Akker(m-1, Akker(m, n-1));
}
0
NightmareZ
1360 / 569 / 37
Регистрация: 31.03.2009
Сообщений: 1,943
08.08.2010, 04:35 #10
Позволю себе вякнуть, что рекурсия тут нафик не нужна, ибо во-первых будет медленее работать, а во-вторых всегда есть возможность словить stack overflow.
0
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,545
Завершенные тесты: 3
08.08.2010, 04:35  [ТС] #11
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
#include <iostream>
 
typedef unsigned long long U_LL;
 
U_LL Akker(U_LL n, U_LL m);
 
int main()
{
    U_LL n, m;
    std::cout<<"Enter first numb: ";
    std::cin>>m;
    std::cout<<"Enter second numb: ";
    std::cin>>n;
    std::cout <<Akker(m, n);
    return 0;
}
 
U_LL Akker(U_LL m, U_LL n)
{
    if(m==0)
        return n+1;
    else if(n==0)
        return Akker(m-1, 1);
    return Akker(m-1, Akker(m, n-1));
}
1
fasked
Эксперт С++
4948 / 2528 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
08.08.2010, 04:37 #12
следующая. вычислить определитель квадратной матрицы рекурсивно.

Добавлено через 1 минуту
Цитата Сообщение от NightmareZ Посмотреть сообщение
Позволю себе вякнуть, что рекурсия тут нафик не нужна, ибо во-первых будет медленее работать, а во-вторых всегда есть возможность словить stack overflow.
можете, но задачи решаются специально рекурсивными методами
0
ForEveR
08.08.2010, 04:38  [ТС]
  #13

Не по теме:

fasked, Ты убийца) Чувствую с этим я просижу дольше

0
NightmareZ
1360 / 569 / 37
Регистрация: 31.03.2009
Сообщений: 1,943
08.08.2010, 04:39 #14
Цитата Сообщение от fasked Посмотреть сообщение
можете, но задачи решаются специально рекурсивными методами
Всмысле специально?
0
easybudda
Модератор
Эксперт CЭксперт С++
9695 / 5645 / 963
Регистрация: 25.07.2009
Сообщений: 10,849
08.08.2010, 04:43 #15
Цитата Сообщение от Lavroff Посмотреть сообщение
Короче и красивше.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>
 
int sum(int * arr, int cnt){
    return ( cnt == 1 ) ? *arr : *arr + sum(arr + 1, cnt - 1);
}
 
int main(void){
    int arr[] = { 1, 2, 3, 4, 5 };
    
    printf("1 + 2 + 3 + 4 + 5 = %d\n", sum(arr, sizeof(arr) / sizeof(*arr)));
 
    return 0;
}
1
08.08.2010, 04:43
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.08.2010, 04:43
Привет! Вот еще темы с ответами:

Сортировка выбором - C++
Выбираeтся минимaльный элeмeнт в мaссивe и пeрeнoсится в нoвый массив. 3aтем нa его местo записывается последний элемент исходного массива.

Сортировка выбором - C++
Помогите тут сделать сортировку выбором for (i = 0; i&lt;n; i++) { for (j = 0; j&lt;n; j++) { if (arr&gt;arr) { ...

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

Сортировка выбором - C++
#include &quot;stdafx.h&quot; #include&quot;iostream&quot; #include&quot;time.h&quot; using namespace std; int main() {srand(time(0)); int a, n, k, q,j; ...


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

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

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