0 / 0 / 0
Регистрация: 18.12.2015
Сообщений: 3
1

Отсортировать массив: все четные элементы по возрастанию а нечетные по убыванию

21.12.2015, 00:14. Показов 2448. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
отсортировать массив все четные элементы которого по возрастанию а не четные по убыванию
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.12.2015, 00:14
Ответы с готовыми решениями:

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

Отсортировать чётные элементы по возрастанию, а нечётные по убыванию
Вот условие(могу кое где ошибаться в правильности постановки задачи) Составить одномерный массив,...

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

Отсортировать четные элементы массива по возрастанию, а нечетные по убыванию
помогите найти ошибку.не верно сортирует. #include <iostream> #include <math.h>...

4
5059 / 2633 / 2346
Регистрация: 10.12.2014
Сообщений: 9,996
21.12.2015, 07:28 2
Как происходит обычная обменная сортировка (в простонародье „пузырьковая“)?
Сравнение и обмен происходит для рядом стоящих элементов:
Pascal
1
2
3
for i := 1 to Size - 1 do
  if A[i] > A[i + 1] then
    Swap(A[i], A[i + 1]);
В вашем случае алгоритм нужно переделать на сравнение элементов „через 1“. Что можно представить так для нечётных индексов:
Pascal
1
2
3
for i := 0 to Size div 2 do
  if A[i*2 + 1] > A[i*2 + 3] then
    Swap(A[i*2 + 1], A[i*2 + 3]);
или для чётных:
Pascal
1
2
3
for i := 1 to Size div 2 do
  if A[i*2] > A[i*2 + 2] then
    Swap(A[i*2], A[i*2 + 2]);

P.S. Я только условие не переделывал… Оба условия для сортировки „по неубыванию“!
0
Почетный модератор
64288 / 47587 / 32739
Регистрация: 18.05.2008
Сообщений: 115,182
21.12.2015, 07:51 3
Цитата Сообщение от logn96 Посмотреть сообщение
все четные элементы которого по возрастанию а не четные по убыванию
Я думаю что это не номера элементов, а сами элементы.
0
5059 / 2633 / 2346
Регистрация: 10.12.2014
Сообщений: 9,996
21.12.2015, 08:10 4
Хм! Может быть.
В таком случае, проще будет воспользоваться дополнительным массивом для чётных и нечётных.
(Или двумя массивами ;–)
Примерно вот так:
Pascal
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
const
  Size = 20;
begin
  Randomize;
  var A : array[1..Size] of Integer;
  for var i := 1 to Size do A[i] := Random(0, 9);
  WriteLn(A);
  
  // Чётные и нечётные в соответствующие массивы
  // (нулевой индекс = количество элементов в массиве)
  var evenA : array[0..Size] of Integer;
  var oddA  : array[0..Size] of Integer;
  for var i := 1 to Size do
    if odd(A[i]) then
      begin
        oddA[0] += 1; oddA[oddA[0]] := A[i];
      end
    else
      begin
        evenA[0] += 1; evenA[evenA[0]] := A[i];
      end;
  
  var Changed : Boolean;
  
  // Чётные по неубыванию
  repeat
    Changed := False;
    for var i := 2 to evenA[0] do
      if evenA[i - 1] > evenA[i] then
        begin
          Swap(evenA[i - 1], evenA[i]);
          Changed := True;
        end;
  until Not Changed;
  
  // Нечётные по невозрастанию
  repeat
    Changed := False;
    for var i := 2 to oddA[0] do
      if oddA[i - 1] < oddA[i] then
        begin
          Swap(oddA[i - 1], oddA[i]);
          Changed := True;
        end;
  until Not Changed;
  
  // Сольём отсортированные данные в исходный массив
  for var i := Size downto 1 do
    if odd(A[i]) then
      begin
        A[i] := oddA[oddA[0]];
        oddA[0] -= 1;
      end
    else
      begin
        A[i] := evenA[evenA[0]];
        evenA[0] -= 1;
      end;
      
  WriteLn(A);
end.
0
Почетный модератор
64288 / 47587 / 32739
Регистрация: 18.05.2008
Сообщений: 115,182
21.12.2015, 10:38 5
Цитата Сообщение от JuriiMW Посмотреть сообщение
воспользоваться дополнительным массивом для чётных и нечётных
Зачем?
Pascal
1
2
3
4
5
6
7
8
9
for i:=1 to n-1 do
for j:=i+1 to n do
if (odd(a[i])and odd(a[j])and (a[i]<a[j]) )
or(not odd(a[i])and not odd(a[j])and (a[i]>a[j]))then
 begin
  x:=a[i];
  a[i]:=a[j];
  a[j]:=x;
 end;
Писал прямо здесь, может где и ошибся.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.12.2015, 10:38
Помогаю со студенческими работами здесь

Создать двухмерный массив, в котором нечетные столбцы отсортировать по возрастанию, а четные по убыванию
Помогите найти ошибку, надо создать двухмерный массив из случайных чисел размера M на N, в котором...

В одномерном массиве отсортировать все четные числа по возрастанию, а нечетные - по убыванию на своих местах
В одномерном числовом массиве отсортировать все четные числа по возрастанию, а нечетные по убыванию...

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

Четные столбцы матрицы отсортировать по возрастанию, а нечетные по убыванию
дан двумерный массив четные столбцы сортировать по возрастанию, а не четные по убыванию


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru