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

Сортировка выборкой - C++

Восстановить пароль Регистрация
 
randy92
7 / 7 / 2
Регистрация: 23.04.2014
Сообщений: 59
10.05.2014, 14:53     Сортировка выборкой #1
Задача:
Сортировка выборкой анализирует массив, отыскивая наименьший элемент массива. Затем этот наименьший элемент обменивается местами с первым элементом массива. Процесс повторяется для подмассива, начинающегося со второго элемента массива. В результате каждого прохода один из элементов занимает соответствующее место. Эта сортировка по производительности сравнима с пузырьковой — для массива из п элементов нужно выполнить п — 1 проход, а для каждого подмассива нужно выполнить п - 1 сравнение для определения наименьшего значения. Когда обрабатываемый подмассив будет содержать только один элемент, значит массив отсортирован. Напишите рекурсивную функцию selectionSort, выполняющую этот алгоритм.

Решение:

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
int selectionSort( int[ ], int );
 
int main()
{
    const int arraySize = 10;
    int a[ arraySize ] = { 4, 6, 5, 43, 78, 79, 42, 32, 1, 90 };
 
   return 0;
}
 
int selectionSort( int arr[ ], int sizeOfArray )
{
    static int counter = 0; // Считает количество рекурсий функции
    int lowest = arr[ counter ]; // Временно сохраняем наименьшее в произвольном эл.
    int temp;
    int position;
 
    for( int i = 0; i < sizeOfArray; i++ ) //Сканируем массив и ищем наименьшее
    {
        if( arr[ i ] < lowest )
        {
            lowest = arr[ i ]; 
            position = i;  //Запоминаем позицию наименьшего
        }
    }
 
    temp = arr[ counter ];    //
    arr[ counter ] = lowest;  // Меняем местами наименьшее и первый элемент
    arr[ position ] = temp;   //
 
    counter++;
 
    if( counter == sizeOfArray ) //Проверка условия. Если массив отсортирован
            return arr[ sizeOfArray ]; // Возвращаем массив
    else
        return selectionSort( arr[ sizeOfArray ], sizeOfArray ); // Иначе опять запускаем функцию
}
В результате компиляции выдает 2 ошибки в строчках:
C++
1
return selectionSort( arr[ sizeOfArray ], sizeOfArray );
C++
1
static int counter = 0;
Как их исправить?
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.05.2014, 14:53     Сортировка выборкой
Посмотрите здесь:

C++ Сортировка подсчетом и LSD сортировка
C++ сортировка в С/С++
СОРТИРОВКА C++
C++ Сортировка выборкой. Рекурсивный метод
Пирамидальная сортировка и сортировка Шелла C++
Сортировка методом "быстрая сортировка" C++
Сравнение быстродействия алгоритмов сортировки слияния с сортировкой линейной выборкой C++
Сортировка выборкой C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
_script_
169 / 137 / 34
Регистрация: 01.05.2012
Сообщений: 414
10.05.2014, 15:44     Сортировка выборкой #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от randy92 Посмотреть сообщение
Как их исправить?
Вот так:

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
int selectionSort( int[ ], int );
 
int main()
{
    const int arraySize = 10;
    int a[ arraySize ] = { 4, 6, 5, 43, 78, 79, 42, 32, 1, 90 };
    selectionSort(a,10);
    for (int i=0; i<10; i++)
        cout << a[i]<<' ';
   return 0;
}
 
int selectionSort( int arr[ ], int sizeOfArray )
{
    static int counter = 0; // Считает количество рекурсий функции
    int lowest = arr[ counter ]; // Временно сохраняем наименьшее в произвольном эл.
    int temp;
    int position=counter;
 
    for( int i = counter; i < sizeOfArray; i++ ) //Сканируем массив и ищем наименьшее
    {
        if( arr[ i ] < lowest )
        {
            lowest = arr[ i ];
            position = i;  //Запоминаем позицию наименьшего
        }
    }
 
    temp = arr[ counter ];    //
    arr[ counter ] = lowest;  // Меняем местами наименьшее и первый элемент
    arr[ position ] = temp;   //
 
    counter++;
 
    if( counter == sizeOfArray ) //Проверка условия. Если массив отсортирован
            return arr[ sizeOfArray ]; // Возвращаем массив
    else
        return selectionSort( arr, sizeOfArray ); // Иначе опять запускаем функцию
}
Yandex
Объявления
10.05.2014, 15:44     Сортировка выборкой
Ответ Создать тему
Опции темы

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