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

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

Войти
Регистрация
Восстановить пароль
 
Babinaa
Сообщений: n/a
#1

Сортировка элементов первой половины одномерного массива по убыванию, а второй – по возрастанию - C++

03.03.2014, 21:40. Просмотров 897. Ответов 5
Метки нет (Все метки)

Добрый Вечер!!!Пожалуйста помогите решить задачу на Шаблоны Функций:
Разработайте программу, в которой реализована сортировка элементов первой половины одномерного массива по убыванию, а второй – по возрастанию.

Заранее большое спасибо!!!
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.03.2014, 21:40     Сортировка элементов первой половины одномерного массива по убыванию, а второй – по возрастанию
Посмотрите здесь:

Сортировка первой половины массива по возрастанию, а второй по убыванию - C++
Здравствуйте, помогите пожалуйста. Дан массив А, состоящий из 20 целых чисел. Отсортируйте первую половину массива по возрастанию, а...

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

Функция определяющая суммы первой и второй половины массива - C++
как разработать функцию , которая определяет суммы первой и второй половины динамического массива и количество положительных элементов в...

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

Сортировка одномерного массива по убыванию - C++
Здравствуйте. Голова уже не варит, не могу понять, где ошибка моя. Задание: Используя memo, записать массив, отсортировать его по...

Элементы, расположенные в первой половине заданного одномерного массива умножить на 2, а во второй - на 3 - C++
1)Есть одномерный массив А размером N. Первую половину элементов массива умножить на 2, вторую на 3.

Сортировка одномерного массива по возрастанию - C++
Скажите, откуда такие числа взялись? И если можно, то исправьте, пожалуйста, мою ошибку. Что-то не так сделал в моменте сортировки...

Функция: сортировка по возрастанию одномерного динамического массива - C++
Составьте и оформите в виде отдельной функции сортировку по возрастанию одномерного динамического массива F из n элементов. Размерность...

Сортировка массива по возрастанию или по убыванию, в зависимости от параметра - C++
Дан массив чисел размерностью 10 элементов. Написать программу, которая сортирует массив по возрастанию или по убыванию, в зависимости от...

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

Двоичные файлы: Переписать элементы первой половины файла в обратном порядке, а второй в исходном - C++
Переписать элементы первой половины файла в обратном порядке, а второй в исходном. Помогите пожалуйста((

Упорядочить элементы одномерного массива по убыванию модулей элементов - C++
Упорядочить элементы одномерного массива по убыванию модулей элементов.


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6442 / 3081 / 306
Регистрация: 04.12.2011
Сообщений: 8,482
Записей в блоге: 4
04.03.2014, 01:40     Сортировка элементов первой половины одномерного массива по убыванию, а второй – по возрастанию #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <algorithm>
using namespace std;
 
template<class T>
void half_sort(T *arr, int sz){
int half_sz = sz/2;
sort(&arr[0], &arr[sz]);//если STL не подходит, напишите шаблон сами
reverse(&arr[half_sz+1], &arr[sz]);//и здесь
}
 
int main(){
int arr[] = {1, 3, 2, 4, 6, 5, 25, 36, 12, 21};
    int sz = sizeof(arr)/sizeof(int);
 
half_sort(arr, sz);
 
for(int i = 0; i < sz; ++i) cout << arr[i] << " "; 
    
cout << endl;
system ( "pause" );
return 0;
}
easybudda
Эксперт С++
9460 / 5473 / 927
Регистрация: 25.07.2009
Сообщений: 10,495
04.03.2014, 02:55     Сортировка элементов первой половины одномерного массива по убыванию, а второй – по возрастанию #3
Сообщение было отмечено автором темы, экспертом или модератором как ответ
IGPIGP, могу ошибаться, но по-моему из { 6, 4, 5, 2, 1, 3 } должно получаться { 4, 5, 6, 3, 2, 1 } а не { 1, 2, 3, 6, 5, 4 }
Мой вариант:
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
41
42
43
44
45
#include <iostream>
#include <algorithm>
#include <functional>
#include <iterator>
#include <ctime>
#include <cstdlib>
 
class BoundedRandom {
    int min;
    int max;
public:
    BoundedRandom(int _min, int _max) : min(_min), max(_max) {}
    int operator () () { return rand() % (max - min + 1) + min; }
};
 
template <typename T>
void twoWaySort(T * ptr, int count) {
    int middle = count / 2 + ( count & 1 );
    std::sort(ptr, ptr + middle, std::less<T>());
    std::sort(ptr + middle, ptr + count, std::greater<T>());
}
 
#define MIN_VALUE (0)
#define MAX_VALUE (9)
 
int main(void) {
    int count;
    BoundedRandom br(MIN_VALUE, MAX_VALUE);
    
    srand(time(NULL));
    
    while ( std::cout << "Number of elements: " && std::cin >> count && count > 0 ) {
        int * array = new int [ count ];
        std::generate_n(array, count, br);
        std::cout << "Unsorted:" << std::endl;
        std::copy(array, array + count, std::ostream_iterator<int>(std::cout, " "));
        std::cout << "\nSorted:" << std::endl;
        twoWaySort(array, count);
        std::copy(array, array + count, std::ostream_iterator<int>(std::cout, " "));
        std::cout << std::endl;
        delete [] array;
    }
    
    return 0;
}
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6442 / 3081 / 306
Регистрация: 04.12.2011
Сообщений: 8,482
Записей в блоге: 4
04.03.2014, 03:10     Сортировка элементов первой половины одномерного массива по убыванию, а второй – по возрастанию #4
Цитата Сообщение от easybudda Посмотреть сообщение
IGPIGP, могу ошибаться, но по-моему из { 6, 4, 5, 2, 1, 3 } должно получаться { 4, 5, 6, 3, 2, 1 } а не { 1, 2, 3, 6, 5, 4 }

Конечно! Я не вник в то, что сначала же по убыванию. Но видя код можно не моргнув глазом написать:
C++
1
2
3
4
5
6
template<class T>
void half_sort(T *arr, int sz){
int half_sz = sz/2;
sort(&arr[0], &arr[sz]);
reverse(&arr[0], &arr[half_sz + 1]);
}
Ваш вариант поиска середины красив. Да и sort с предикатами для шаблона, тоже лучше.

Не по теме:

Хотя я никогда не понимал где середина при нечетном количестве.

easybudda
04.03.2014, 15:42
  #5

Не по теме:

Цитата Сообщение от IGPIGP Посмотреть сообщение
Хотя я никогда не понимал где середина при нечетном количестве
Пруф, конечно, не приведу, но как-то привычнее считать, что 5 это 3 и 2, а не 2 и 3...

IGPIGP
04.03.2014, 17:47     Сортировка элементов первой половины одномерного массива по убыванию, а второй – по возрастанию
  #6

Не по теме:

easybudda, только сейчас дошло, что мой вариант вообще не годится. Только частями нужно сортировать и сразу видно, что работы, сравнительно, несколько больше. Реверс значительно быстрее сортировки, но это слабое утешение.

C++
1
2
3
4
5
6
7
template<class T>
void half_sort(T *arr, int sz){
int half_sz = sz/2;
sort(&arr[0], &arr[half_sz]);
sort(&arr[half_sz], &arr[sz]);//не в ту сторону сортировка и поэтому:
reverse(&arr[0], &arr[half_sz]);//лишняя работа)
}
и так первая половина при нечете всегда меньше, что совершенно справедливо.

Yandex
Объявления
04.03.2014, 17:47     Сортировка элементов первой половины одномерного массива по убыванию, а второй – по возрастанию
Ответ Создать тему
Опции темы

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