Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/15: Рейтинг темы: голосов - 15, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 30.04.2014
Сообщений: 77
1

Упорядочить только только четные элементы массива, нечетные оставить на своих местах

11.05.2014, 19:09. Показов 2860. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите пожалуйста переделать программу так, чтобы функция сортировала только четные элементы, а нечетные оставить на своих местах.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void CountSort(int *a, int n)
{
    int *count, m, i, j, k, min, max;
    count = NULL;
    min = max = a[0];
    for ( i = 0; i < n; i++)
                if (a[i] < min)
                min = a[i];
            else if (a[i]>max)
                max = a[i];
            m = max - min + 1;
            count = (int*)calloc(m, sizeof(int));
            for (i = 0; i < n; i++)
                count[a[i] - min]++;
            k = 0;
            for (i = 0; i < m; i++)
                for (j = 0; j < count[i]; j++)
                    a[k++] = i + min;
            free(count);        
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.05.2014, 19:09
Ответы с готовыми решениями:

Отсортировать в массиве четные элементы, а нечетные оставить на своих местах
Прочитала много, вроде и алгоритм понимаю, но не могу реализовать. Нужно отсортировать в массиве...

Отсортировать четные элементы, а нечетные оставить на местах
Здравствуйте, долго мучаюсь и не могу понять. Нужно отсортировать четные элементы, а не четные...

Отсортировать четные элементы, а не четные оставить на своих сместах
Здравствуйте, долго мучаюсь и не могу понять. Нужно отсортировать четные элементы, а не четные...

Упорядочить по невозрастанию только четные числа данного целочисленного массива
Упорядочить по невозрастанию только четные числа данного целочисленного массива, нечетные оставить...

7
7 / 4 / 14
Регистрация: 05.02.2014
Сообщений: 131
11.05.2014, 19:15 2
Bestear, if(число%2==0){}
0
0 / 0 / 0
Регистрация: 30.04.2014
Сообщений: 77
11.05.2014, 19:26  [ТС] 3
ну понятно, а куда это приписать?
0
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
11.05.2014, 19:33 4
Bestear, предлагаю следующий вариант: создаем массив структур (структура хранит индекс элемента в исходном массиве и значение элемента массива) всех четных элементов массива. Сортируем этот массив по значению, меняем числа в исходном массиве на числа из массива структур по индексам из него же. Либо тоже самое, но без структур, а с указателями.
1
0 / 0 / 0
Регистрация: 30.04.2014
Сообщений: 77
11.05.2014, 20:03  [ТС] 5
мы не прошли структуры. Просто мне нужно как то переделать мою сортировку подсчетом так, чтобы функция сортировала только четные элементы, а нечетные оставляла на своих местах.

Добавлено через 26 минут
ау)
0
Эксперт функциональных языков программированияЭксперт Java
4486 / 2721 / 485
Регистрация: 28.04.2012
Сообщений: 8,590
11.05.2014, 20:44 6
Например:

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
#include <u.h>
#include <libc.h>
 
void
sort(int *vector, int *indexes, uint size)
{
    int i, j, icur, imin, tmp;
 
    for (i = 0; i < size-1; i++) {
        imin = indexes[i];
        for (j = i+1; j < size; j++) {
            icur = indexes[j];
            if (vector[icur] < vector[imin])
                imin = icur;
        }
        icur = indexes[i];
        if (imin != icur) {
            tmp = vector[imin];
            vector[imin] = vector[icur];
            vector[icur] = tmp;
        }
    }
}
 
void
println(int *vector, uint size)
{
    int i;
    for (i = 0; i < size; i++)
        print("%3d ", vector[i]);
    print("\n");
}
 
#define N 10
 
void
main(void)
{
    int i, vector[N], indexes[N];
    uint n;
 
    srand(nsec());
    for (i = 0; i < N; i++)
        vector[i] = nrand(N*N);
 
    n = N/2;
    for (i = 0; i < n; i++)
        indexes[i] = i*2;
 
    println(vector, N);
    sort(vector, indexes, n);
    println(vector, N);
 
    exits(0);
}
Bash
1
2
 49   8  33   1  31  43  91  38  45  18 
 31   8  33   1  45  43  49  38  91  18
1
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
11.05.2014, 20:48 7
Bestear, Вот пример.
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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
int * setEvents (int * a, const int s, int * counter) {
    int * ptr, i = 0;
    *counter = 0;
 
    ptr = malloc(s * sizeof(int));
 
    for(; i < s; i++) {
 
        if (a[i] % 2 == 0) {
            (*counter)++;
            ptr[(*counter) - 1] = a[i];
        }
    }
 
    ptr = realloc(ptr, (*counter) * sizeof(int));
    return ptr;
}
 
void setEventValues(int * src, int * dst, const int s) {
 
    int i = 0, *p = src;
 
    for(; i < s; i++)
        if (dst[i] % 2 == 0) {
            dst[i] = *p;
            p++;
        }
}
 
int comp(const void *i, const void *j) {
  return *(int *)i - *(int *)j;
}
 
int main() {
 
    int a[] = {9, 8, 7, 6, 5, 4, 3, 2, 1};
    int sizeEvents;
    /*создаем массив четных чисел*/
    int * events = setEvents(a, 9, &sizeEvents);
    /*сортируем массив четных чисел*/
    qsort(events, sizeEvents, sizeof(int), comp);
    /*записываем четные числа обратно в исходный массив*/
    setEventValues(events, a, 9);
 
    for(sizeEvents = 0; sizeEvents < 9; sizeEvents++)
        printf("%3i", a[sizeEvents]);
    putchar('\n');
 
    return 0;
}
0
0 / 0 / 0
Регистрация: 30.04.2014
Сообщений: 77
12.05.2014, 00:59  [ТС] 8
Наверно я неправильно сформулировал просьбу. Помогите пожалуйста переделать МОЮ сортировку подсчетом так, чтобы функция сортировала только четные элементы, а нечетные оставить на своих местах. Мне нужно усвоить именно эту сортировку. Мне кажется, нужно добавить
Цитата Сообщение от Fear1911 Посмотреть сообщение
if(число%2==0)
только не знаю куда и как добавить, чтобы работало

Добавлено через 1 час 56 минут
ало)

Добавлено через 2 часа 9 минут
есть тут кто?)
0
12.05.2014, 00:59
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.05.2014, 00:59
Помогаю со студенческими работами здесь

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

Сортировка одномерного массива - числа большие 2 по возрастанию, а остальные оставить на своих местах
вот примерный код, что там нужно исправить #include &lt;stdio.h&gt; #include &lt;iostream.h&gt; #include...

Во второй массив переписать только нечетные элементы первого массива
Помогите, пожалуйста найти ошибку в этом задании: Пользователь вводит 1-ый массив, во 2-ой...

В символьной строке оставить только те слова, которые состоят только из разных букв
Мне дали такое задание В символьной строке оставить только те слова, которые состоят только из...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru