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

Сортировка массива - C++

Восстановить пароль Регистрация
 
Psixodelik
 Аватар для Psixodelik
38 / 37 / 2
Регистрация: 27.11.2009
Сообщений: 93
23.06.2011, 17:08     Сортировка массива #1
Всем привет...вот завтра надо сдавать, а что то мой мозг подкипает. В общем суть такова: есть массив, который передаётся в функцию(функцию выложил). Нужно преобразовать так, что бы вначале шли элементы отличающиеся от максимального не более чем на 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
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.06.2011, 17:08     Сортировка массива
Посмотрите здесь:

C++ Сортировка массива
C++ Сортировка массива
Быстрая сортировка(сортировка Хоара). Отсортировать фрагмент массива C++
Указатели массива и сортировка массива C++
сортировка массива C++
C++ Сортировка массива, вместо массива выводит мусор
Сортировка массива структур через сортировку массива указателей C++
Сортировка массива. Ошибка после ввода размерности массива C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
sandye51
программист С++
 Аватар для sandye51
677 / 579 / 39
Регистрация: 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;
}
IIIa66uMEM6eP
заставил Бендера
 Аватар для IIIa66uMEM6eP
432 / 288 / 10
Регистрация: 05.12.2010
Сообщений: 1,642
Записей в блоге: 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;
}
Yandex
Объявления
23.06.2011, 19:40     Сортировка массива
Ответ Создать тему
Опции темы

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