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

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

Восстановить пароль Регистрация
 
tasik
0 / 0 / 0
Регистрация: 27.12.2012
Сообщений: 52
15.10.2013, 09:51     Нужно отсортировать одномерный масив #1
Преобразовать массив таким образом, чтобы сначала располагались все элементы, отличающиеся от максимального не более чем на 20%, а затем - все остальные.

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

C++ Создать одномерный масив...
C++ одномерный масив решено но не до конца.
одномерный масив... C++
одномерный масив C++
Отсортировать масив C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Folko
 Аватар для Folko
265 / 253 / 7
Регистрация: 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]);
     }
при таком способе остальные значения располагаются не в исходном порядке
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4920 / 2663 / 243
Регистрация: 29.11.2010
Сообщений: 7,409
15.10.2013, 10:11     Нужно отсортировать одномерный масив #3
По сути, если нет ограничений в виде сохранения упорядоченности, то можно просто отсортировать по убыванию
tasik
0 / 0 / 0
Регистрация: 27.12.2012
Сообщений: 52
15.10.2013, 10:13  [ТС]     Нужно отсортировать одномерный масив #4
Функцию swap самому написать или стандартная?
SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5548 / 2562 / 233
Регистрация: 01.11.2011
Сообщений: 6,330
Завершенные тесты: 1
15.10.2013, 10:18     Нужно отсортировать одномерный масив #5
Цитата Сообщение от tasik Посмотреть сообщение
отличающиеся от максимального не более чем на 20%
Цитата Сообщение от tasik Посмотреть сообщение
а затем - все остальные
Что первые, что вторые - как должны располагаться между собой?
kamre
126 / 130 / 4
Регистрация: 25.12.2011
Сообщений: 438
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,
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 , библиотека стл подключена
kamre
126 / 130 / 4
Регистрация: 25.12.2011
Сообщений: 438
15.10.2013, 10:57     Нужно отсортировать одномерный масив #8
Цитата Сообщение от tasik Посмотреть сообщение
использую dev cpp portable
Важно какой компилятор используется. У меня с mingw gcc 4.8.1 (с ключом '-std=c++11') и msvc 2013 все работает.
aLarman
636 / 557 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
15.10.2013, 11:03     Нужно отсортировать одномерный масив #9
Цитата Сообщение от tasik Посмотреть сообщение
C++
1
begin(a)
просто
C++
1
a
C++
1
end(a)
C++
1
а+10
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4920 / 2663 / 243
Регистрация: 29.11.2010
Сообщений: 7,409
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] << ", ";
}
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
15.10.2013, 12:14     Нужно отсортировать одномерный масив #11
Цитата Сообщение от tasik Посмотреть сообщение
Преобразовать массив таким образом...
Задача на прохождение по массиву ровно 1 раз, никаких сортировок и т.д.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.10.2013, 12:47     Нужно отсортировать одномерный масив
Еще ссылки по теме:

Отсортировать масив методом пузырьковой сортировки C++
C++ Одномерный масив.Добавление элементов в конец.С++
C++ Одномерный масив: расположить символы в обратном порядке

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

Или воспользуйтесь поиском по форуму:
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 минуту
Спасибо всем кто принимал участие.
Тема закрыта.
Yandex
Объявления
15.10.2013, 12:47     Нужно отсортировать одномерный масив
Ответ Создать тему
Опции темы

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