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

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

Восстановить пароль Регистрация
 
Jurlique
0 / 0 / 0
Регистрация: 13.11.2013
Сообщений: 46
22.11.2013, 21:34     массив сортировка #1
C++ (Qt)
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
46
47
48
49
50
51
52
#include <iostream>
 
using namespace std;
 
int main()
 
{
    // Ввод массива
 
    int const n = 11;
    int mas[n];
    int i;
    for (i = 0; i < n; i++) cin >> mas[i];
 
    // Количество элементов массива равных 0
 
    int count = 0;
    for (i = 0; i < n; i++)
        if (mas[i] == 0) count++;
    cout << count << ' ';
 
    // Сумма элементов массива расположенных после минимального элемента
 
    int min = 0;
    for (i = 0; i < n; i++)
        if (mas[i] < mas[min]) min = i;
 
    int sum = 0;
    for (i = min + 1; i < n; i++)
        sum += mas[i];
    cout << sum << '\n';
 
    // Упорядочить элементы массива по возрастанию модулей
 
    int j;
    for (i = n - 1; i >= 1; i--)
        for (j = 0; j < i; j++){
 
            if (abs(mas[j]) > abs(mas[j + 1])){
 
                int sort = mas[j];
                mas[j] = mas[j + 1];
                mas[j + 1] = sort;
 
            }
        }
 
        for (i = 0; i < n; i++)
            cout << mas[i] << ' ';
 
        return 0;
}
Помогите понять, что надо изменить.

Входные данные:
10 8 -4 3 0 -7 4 2 5 0 1

Верный результат
2 12.000000
0.00 0.00 1.00 2.00 3.00 4.00 -4.00 5.00 -7.00 8.00

мой результат
2 12
0 0 1 2 3 -4 4 5 -7 8 10

как это исправить?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.11.2013, 21:34     массив сортировка
Посмотрите здесь:

C++ C++, одномерный массив, сортировка.
Динамический массив, сортировка C++
C++ Двумерный массив - сортировка.
2-х массив сортировка C++
C++ Сортировка обменами (массив)
Одномерный массив, сортировка C++
Сортировка (двумерный массив) C++
C++ Массив сортировка

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Angeline
36 / 30 / 2
Регистрация: 21.10.2013
Сообщений: 197
22.11.2013, 23:55     массив сортировка #2
C++
1
2
3
4
5
6
7
8
9
/*после основной сортировки*/for (i=0; i<11; i++)
{
if (abs(mas[i])==abs(mas[i+1] && mas[i]<mas[i+1])
{
int sort = mas[j];
                mas[j] = mas[j + 1];
                mas[j + 1] = sort;
}
}
Jurlique
0 / 0 / 0
Регистрация: 13.11.2013
Сообщений: 46
23.11.2013, 00:04  [ТС]     массив сортировка #3
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#include <iostream>
 
using namespace std;
 
int main()
 
{
    // Ввод массива
 
    int i, n;
    cin >> n;
    int *mas = new int[n];
    for (i = 0; i < n; i++) cin >> mas[i];
 
    // Количество элементов массива равных 0
 
    int count = 0;
    for (i = 0; i < n; i++)
        if (mas[i] == 0) count++;
    cout << count << ' ';
 
    // Сумма элементов массива расположенных после минимального элемента
 
    int min = 0;
    for (i = 0; i < n; i++)
        if (mas[i] < mas[min]) min = i;
 
    int sum = 0;
    for (i = min + 1; i < n; i++)
        sum += mas[i];
    cout << sum << '\n';
 
    // Упорядочить элементы массива по возрастанию модулей
 
    int j;
    for (i = n - 1; i >= 1; i--)
        for (j = 0; j < i; j++){
 
            if (abs(mas[j]) > abs(mas[j + 1])){
 
                int sort = mas[j];
                mas[j] = mas[j + 1];
                mas[j + 1] = sort;
 
            }
        }
 
        for (i = 0; i < 11; i++)
        {
            if (abs(mas[i]) == abs(mas[i + 1] && mas[i] < mas[i + 1]))
            {
                int sort = mas[j];
                mas[j] = mas[j + 1];
                mas[j + 1] = sort;
            }
        }
 
        for (i = 0; i < n; i++)
            cout << mas[i] << ' ';
 
        return 0;
}
Результат
2 12
0 1 0 2 3 -4 4 5 -7 8 - это не верно

Добавлено через 1 минуту
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#include <iostream>
 
using namespace std;
 
void myfunc(float* mas, int start, int end); //Функция
 
int main()
 
{
    // Ввод массива
 
    int i, n;
    cin >> n;
    float *mas = new float[n];
    for (i = 0; i < n; i++) cin >> mas[i];
 
    // Количество элементов массива равных 0
 
    int count = 0;
    for (i = 0; i < n; i++)
        if (mas[i] == 0) count++;
    cout << count << ' ';
 
    // Сумма элементов массива расположенных после минимального элемента
 
    int min = 0;
    for (i = 0; i < n; i++)
        if (mas[i] < mas[min]) min = i;
 
    float sum = 0;
    for (i = min + 1; i < n; i++)
        sum += mas[i];
    cout << sum << '\n';
 
    // Подключаем функцию в программу
 
    myfunc(mas, 0, n - 1);
 
 
    // Вывод сортировки массива
 
    for (i = 0; i < 10; i++)
        cout << mas[i] << ' ';
 
        return 0;
}
 
//Функция(сортировка массива)
 
void myfunc(float* mas, int start, int end)
 
{
    int i = start, j = end;
    float x = abs(mas[(start + end) / 2]);
 
    do {
        while (abs(mas[i]) < x) i++;
        while (abs(mas[j]) > x) j--;
 
        if (i <= j) {
            if (i < j) { float a = mas[i]; mas[i] = mas[j]; mas[j] = a; }
            i++;
            j--;
        }
    } while (i <= j);
 
    if (i < end)
        myfunc(mas, i, end);
    if (start < j)
        myfunc(mas, start, j);
}
вот правильный код, у меня получилось так.
Yandex
Объявления
23.11.2013, 00:04     массив сортировка
Ответ Создать тему
Опции темы

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