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

Сортировка массива за один проход

04.03.2019, 18:31. Показов 3219. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
помогите пожалуйста с задачей , хоть какие-нибудь варианты
--
Переместить в целочисленном массиве элементы таким образом, чтобы все
отрицательные числа предшествовали положительным. Отрицательные и
положительные числа полностью сортировать не надо, достаточно отделить их
друг от друга. Решить данную задачу за один просмотр массива. Вывести на
экран экран количество сравнений и перестановок элементо
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.03.2019, 18:31
Ответы с готовыми решениями:

Найти число минимальных элементов массива за один проход без использования дополнительной памяти
Найти число мин. элементов за один проход без использования массива. (Числа мы записываем в файл ,...

Сортировка массива за один проход
Помогите. Нужно отсортировать массив так, чтобы справа были отрицательные, слева положительные и...

Сортировка в один проход по нескольким полям
Добрый вечер, #include <iostream> #include <ctime> #include <vector> #include <algorithm>...

Среди элементов массива Z (m) найти k (k << m) крупнейших. Поиск осуществить за один проход (просмотр) массива Z
Среди элементов массива Z (m) найти k (k &lt;&lt; m) крупнейших. Поиск осуществить за один проход...

4
327 / 218 / 108
Регистрация: 12.02.2019
Сообщений: 1,033
04.03.2019, 19:11 2
Лучший ответ Сообщение было отмечено FrozenHeartpity как решение

Решение

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
    int n,i,x,*a;
    int sz=sizeof(int);
 
    printf("n: ");
    scanf("%d",&n);
    a=(int*)calloc(n,sz);
    srand((unsigned)time(0));
    for(i=0; i<n; i++)
    {
        a[i]=rand()%19-9;
        printf("%d ",a[i]);
    }
    printf("\n");
    for(i=1; i<n; i++)
        if(a[i]<0)
        {
            x=a[i];
            memmove(a+1,a,i*sz);
            *a=x;
        }
    for(i=0; i<n; i++)
        printf("%d ",a[i]);
    printf("\n");
    free(a);
1
596 / 288 / 178
Регистрация: 06.06.2016
Сообщений: 549
04.03.2019, 19:29 3
Лучший ответ Сообщение было отмечено FrozenHeartpity как решение

Решение

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
 #include <stdio.h>
 
 int main()
 {
    int arr[] = {1, -3, 5, 8, 8, -7, -6, 9, -5, -7 };
    int arr_size = sizeof( arr ) / sizeof( arr[0] );
        for ( int i = 0; i < arr_size; ++i )
          printf( "%d  ", arr[ i ] );
    printf( "\n" ); 
    int number_of_permutations = 0;
        for ( int left = 0, right = arr_size - 1; left <= right;  )
        {
  
             if ( (arr[ left ] > 0 ) && ( arr[ right ] <  0) )
             {
                int temp     = arr[ right ];
                arr[ right ] = arr[ left  ];
                arr[ left  ] = temp;
                --right;
                ++left;
                ++number_of_permutations; 
             }
             else
             {
                  if ( arr[ left ] < 0 ) ++left;
                  if ( arr[ right] > 0 ) --right;
             }
        }
        for ( int i = 0; i < arr_size; ++i )
          printf( "%d  ", arr[ i ] );
    printf( "\n number of permutations = %d \n", number_of_permutations ); 
    return 0;
 }
1
0 / 0 / 0
Регистрация: 24.09.2018
Сообщений: 27
04.03.2019, 20:45  [ТС] 4
Большое спасибо!
0
307 / 288 / 116
Регистрация: 23.01.2018
Сообщений: 933
05.03.2019, 09:02 5
Лучший ответ Сообщение было отмечено FrozenHeartpity как решение

Решение

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <stdio.h>
 
int main(void)
{
    int arr[] = {1, -3, 5, 8, 8, -7, -6, 9, -5, -7 };
    for (int i = 0, j = 1; i < sizeof(arr) / sizeof(arr[0]) && j < sizeof(arr) / sizeof(arr[0]);) {
        if (arr[i] < 0) {
            ++i;
        } else if (j <= i) {
            j = i + 1;
        } else if (arr[j] >= 0) {
            ++j;
        } else {
            int t = arr[i];
            arr[i] = arr[j];
            arr[j] = t;
        }
    }
    for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); ++i) {
        (void)printf("%d%c", arr[i], i == sizeof(arr) / sizeof(arr[0]) - 1 ? '\n' : ' ');
    }
    return 0;
}
1
05.03.2019, 09:02
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.03.2019, 09:02
Помогаю со студенческими работами здесь

Количество минимальных элементов массива за один проход
Здравствуйте! Очень нужна помощь! Есть достаточно простая задачка: &quot;В массиве хранится информация...

Найти k наибольших элементов массива (за один проход)
среди элементов массива Z(m) найти к наибольших(к&lt;&lt;m) . поиск осуществить за один проход по массиву

Найти максимальную сумму элементов строк в один проход массива
2) Напишите программу, решающую поставленную задачу в один проход массива. задача:Ищет в...

Найти максимальный элемент массива и их количество за один проход по массиву
Дан массив целых чисел. Найти максимальный элемент массива и их количество за один проход по...


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

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