Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
tasik
0 / 0 / 0
Регистрация: 27.12.2012
Сообщений: 52
1

Нужно отсортировать одномерный масив

15.10.2013, 09:51. Просмотров 450. Ответов 11
Метки нет (Все метки)

Преобразовать массив таким образом, чтобы сначала располагались все элементы, отличающиеся от максимального не более чем на 20%, а затем - все остальные.

Максимальный елемент нашол!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.10.2013, 09:51
Ответы с готовыми решениями:

Отсортировать масив
Отсортировать элементы массива по возрастанию только положительные элементы.

одномерный масив
написать прогораму которая позволяет вводить одномерный массив и при этом...

Одномерный масив
в одномерном массиве состоящем из n вещественных элементов, вычислить: ...

одномерный масив...
Здравствуйте помогите пожалйста...в одномерном массиве сделать так чтоб все...

C++, одномерный масив
В одномерном массиве, состоящем из n действительных элементов, найдите: 1)...

11
Folko
265 / 253 / 27
Регистрация: 27.09.2013
Сообщений: 877
Записей в блоге: 1
15.10.2013, 10:01 2
tasik, не уверен что хорошее решение, но заводим дополнительную переменную, которая показывает количество перемещенных элементов и сделать нечто вроде:
C++
1
2
3
4
5
6
7
int t = -1;
for (int i=0;i<n;i++)
     if (abs(array[i]) - array[max]) <= abs(array[max]*0.2)
     {
          t++;
          swap(array[t],array[i]);
     }
при таком способе остальные значения располагаются не в исходном порядке
1
MrGluck
Модератор
Эксперт CЭксперт С++
8101 / 4952 / 1436
Регистрация: 29.11.2010
Сообщений: 13,437
15.10.2013, 10:11 3
По сути, если нет ограничений в виде сохранения упорядоченности, то можно просто отсортировать по убыванию
2
tasik
0 / 0 / 0
Регистрация: 27.12.2012
Сообщений: 52
15.10.2013, 10:13  [ТС] 4
Функцию swap самому написать или стандартная?
0
SatanaXIII
Почетный модератор
Эксперт С++
5773 / 2773 / 377
Регистрация: 01.11.2011
Сообщений: 6,743
Завершенные тесты: 1
15.10.2013, 10:18 5
Цитата Сообщение от tasik Посмотреть сообщение
отличающиеся от максимального не более чем на 20%
Цитата Сообщение от tasik Посмотреть сообщение
а затем - все остальные
Что первые, что вторые - как должны располагаться между собой?
0
kamre
127 / 131 / 11
Регистрация: 25.12.2011
Сообщений: 443
15.10.2013, 10:18 6
Цитата Сообщение от tasik Посмотреть сообщение
чтобы сначала располагались все элементы, отличающиеся от максимального не более чем на 20%, а затем - все остальные
Вроде же все тривиально:
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <algorithm>
#include <iostream>
 
using namespace std;
 
int main() {
  int a[] = { 50, 95, 15, 13, 35, 75, 80, 90, 100, 40 };
  int max = *max_element(begin(a), end(a));
  stable_partition(begin(a), end(a), [=](int i) { return abs(i - max) <= 0.2*abs(max); });
  for (int i : a)
    cout << i << ", ";
}
95, 80, 90, 100, 50, 15, 13, 35, 75, 40,
1
tasik
0 / 0 / 0
Регистрация: 27.12.2012
Сообщений: 52
15.10.2013, 10:51  [ТС] 7
Цитата Сообщение от kamre Посмотреть сообщение
Вроде же все тривиально:
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <algorithm>
#include <iostream>
 
using namespace std;
 
int main() {
  int a[] = { 50, 95, 15, 13, 35, 75, 80, 90, 100, 40 };
  int max = *max_element(begin(a), end(a));
  stable_partition(begin(a), end(a), [=](int i) { return abs(i - max) <= 0.2*abs(max); });
  for (int i : a)
    cout << i << ", ";
}
использую dev cpp portable , ошибка 9 33 ] 'begin' was not declared in this scope , библиотека стл подключена
0
kamre
127 / 131 / 11
Регистрация: 25.12.2011
Сообщений: 443
15.10.2013, 10:57 8
Цитата Сообщение от tasik Посмотреть сообщение
использую dev cpp portable
Важно какой компилятор используется. У меня с mingw gcc 4.8.1 (с ключом '-std=c++11') и msvc 2013 все работает.
1
aLarman
646 / 567 / 164
Регистрация: 13.12.2012
Сообщений: 2,123
Завершенные тесты: 2
15.10.2013, 11:03 9
Цитата Сообщение от tasik Посмотреть сообщение
C++
1
begin(a)
просто
C++
1
a
C++
1
end(a)
C++
1
а+10
1
MrGluck
Модератор
Эксперт CЭксперт С++
8101 / 4952 / 1436
Регистрация: 29.11.2010
Сообщений: 13,437
15.10.2013, 12:11 10
aLarman, не только.
Там из С++11 еще лямбда-функция и for цикл по коллекции. Вот под 98 стандарт:
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 <algorithm>
#include <iostream>
#include <cmath>
 
class NearMax
{
  public:
    NearMax(const int x): max(x) {}
    bool operator()(const int x)
    {
        return abs(x - max) <= 0.2*abs(max);
    }
  private:
    int max;
};
 
int main()
{
    int a[] = { 50, 95, 15, 13, 35, 75, 80, 90, 100, 40 };
    const int N = sizeof(a) / sizeof(*a);
    int max = *std::max_element(a, a + N);
    std::stable_partition(a, a + N, NearMax(max));
    for (int i=0; i < N; i++)
        std::cout << a[i] << ", ";
}
1
Thinker
Эксперт С++
4233 / 2207 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
15.10.2013, 12:14 11
Цитата Сообщение от tasik Посмотреть сообщение
Преобразовать массив таким образом...
Задача на прохождение по массиву ровно 1 раз, никаких сортировок и т.д.
0
tasik
0 / 0 / 0
Регистрация: 27.12.2012
Сообщений: 52
15.10.2013, 12:47  [ТС] 12
Цитата Сообщение от MrGluck Посмотреть сообщение
aLarman, не только.
Там из С++11 еще лямбда-функция и for цикл по коллекции. Вот под 98 стандарт:
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 <algorithm>
#include <iostream>
#include <cmath>
 
class NearMax
{
  public:
    NearMax(const int x): max(x) {}
    bool operator()(const int x)
    {
        return abs(x - max) <= 0.2*abs(max);
    }
  private:
    int max;
};
 
int main()
{
    int a[] = { 50, 95, 15, 13, 35, 75, 80, 90, 100, 40 };
    const int N = sizeof(a) / sizeof(*a);
    int max = *std::max_element(a, a + N);
    std::stable_partition(a, a + N, NearMax(max));
    for (int i=0; i < N; i++)
        std::cout << a[i] << ", ";
}
Работает!

Добавлено через 1 минуту
Спасибо всем кто принимал участие.
Тема закрыта.
0
15.10.2013, 12:47
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.10.2013, 12:47

Отсортировать масив методом пузырьковой сортировки
1). Создать 2 массива по 5 элементов. Заполнить их случайными числами и...

Создать одномерный масив...
Создать одномерный масив у, елементы которого вычесляются по формуле y=f(k),...

одномерный масив решено но не до конца.
Всем программистам привет ! В общем дан одномерный массив , надо найти:...


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

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

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