Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Psixodelik
40 / 39 / 5
Регистрация: 27.11.2009
Сообщений: 100
1

Сортировка массива

23.06.2011, 17:08. Просмотров 332. Ответов 2
Метки нет (Все метки)

Всем привет...вот завтра надо сдавать, а что то мой мозг подкипает. В общем суть такова: есть массив, который передаётся в функцию(функцию выложил). Нужно преобразовать так, что бы вначале шли элементы отличающиеся от максимального не более чем на 20%, а дальше все остальные. Привожу саму функцию:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
void sort(int ar[], int n)
{
        int max = 0;
        int maxi;
        for (int i = 1; i < n; i++)
        if (ar[i]>max) { maxi = i; max = ar[i]; }
        swap(ar[maxi], ar[0]);   
        double koffMax = max/100*20;
        int k = 1;
        
        for(int i = 0; i < n-1; i++)
        {
            if(max-ar[i+1] < koffMax)
            {
                //Не могу додуматься что писать здесь ;(
            }
        }
        
 
        for(int i = 0; i < n; i++)
            cout << ar[i] << endl;
}
Help
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.06.2011, 17:08
Ответы с готовыми решениями:

Быстрая сортировка(сортировка Хоара). Отсортировать фрагмент массива
Мне нужно отсортировать фрагмент массива, расположенный между первым и...

Сортировка массива: перенести положительные числа в начало, а отрицательные - в конец массива
Дан вещественный массив A(N). Отсортировать его таким образом, чтобы все...

Сортировка массива. Ошибка после ввода размерности массива
подскажите почему после ввода размерности массива выдает ошибку...

Сортировка массива структур через сортировку массива указателей
Ошибка возникает в функции void sort(student **ppStud, int k, char ch). Кто...

Сортировка массива, вместо массива выводит мусор
Здравствуйте Уважаемые жители форума! Есть рабочий код сортируем массив...

2
sandye51
программист С++
833 / 592 / 147
Регистрация: 19.12.2010
Сообщений: 2,016
23.06.2011, 19:09 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
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include <conio.h>
#include <stdlib.h>
#include <locale>
#include <iostream>
#include <algorithm>
 
using namespace std;
 
void sort(double* A, size_t size)
{
    double a = *max_element(A, A + size);
    stable_partition(A, A + size, 
        [=](double e)->bool
        {
            return e / a >= 0.8;
    });
}
 
int main()
{
    setlocale(LC_ALL, "Russian");
 
    size_t M;
    cout << "Введите размер массива A" << endl;
    cin >> M;
 
    double * A = new double[M];
 
    cout << "Введите " << M << " элементов массива A" << endl;
    for (size_t i = 0; i < M; ++i)
        cin >> A[i];
 
    sort(A, M);
 
    cout << "Полученный массив A" << endl;
    for (size_t i = 0; i < M; ++i)
        cout << A[i] << " ";
 
    _getch();
 
    delete[]A;
 
    return EXIT_SUCCESS;
}
0
IIIa66uMEM6eP
заставил Бендера
843 / 309 / 16
Регистрация: 05.12.2010
Сообщений: 1,662
Записей в блоге: 6
23.06.2011, 19:40 3
Psixodelik, еще один, как вариант, без функции:
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
#include <cstdlib>
#include <iostream>
#include <cmath>
#include <clocale>
using namespace std;
int main(int argc, char *argv[])
{    setlocale (LC_CTYPE, "rus");   
    int m;
    double koff = 0.2;
    cout << "Ввести размер массива" << endl;
    cin >> m;
    int Masiv[m];
    cout << "Ввести массив :"<< m << endl;
    for(int i=0; i<m; i++)
    cin >> Masiv[i];
 
int max = Masiv[0]; int n;
    for (int i=1; i < m; i++)
      if (Masiv[i]>max) {n = i; max = Masiv[i]; }
// вышли из цикла 
//  индекс максимума - в переменной n
 swap(Masiv[n], Masiv[0]);    //  сам максимум - на первое место в массиве 
// 20 процентов от максимального элемента
double koffMax = max * koff; 
int i = 1; int k = 1;
while (i < m)
{  if ((max - Masiv[i]) < koffMax) 
    if(i > k) 
    {
        swap(Masiv[i], Masiv[k]);
      ++k; 
    }
    ++i;   
}
// Вывод массива
for(int i = 0; i < m; ++i)
   cout <<Masiv[i]<<' ';
cout <<endl; 
    
    system("PAUSE");
    return EXIT_SUCCESS;
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.06.2011, 19:40

Указатели массива и сортировка массива
Доброго времени суток, вот бьюсь над проблемой, нужна программа которая б...

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

Сортировка массива
У меня есть цель наклепать сортировку с помощью (1)прямого выбора и и...


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

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

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