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

Какое число окажется в середине если расставить элементы массива по возрастанию c

вывод отсортированного числа по середине

Условие
Какое число окажется в середине, если расставить элементы массива по возрастанию?

Формат входных данных
В первой строке вводится нечетное натуральное число N (N < 1000) - количество элементов в массиве.

В следующей строке вводятся N натуральных чисел, не превосходящих 109.
входные данные

выходные данные
5
6 2 7 4 2

Лучшие ответы ( 2 )
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Вывод отсортированного списка на экран
Здравствуйте! Задание программы: составить список упорядоченный по фамилии и вывести его на.

Вывод на экран отсортированного массива
Помогите написать вывод отсортированного массива в самом конце, где пустые фигурные скобки, в.

Эксперт функциональных языков программированияЭксперт Python

35491 / 19968 / 4183
Регистрация: 12.02.2012
Сообщений: 33,132
Записей в блоге: 13

Лучший ответ

Сообщение было отмечено k1cha как решение

Решение

ЦитатаСообщение от k1cha Посмотреть сообщение

Примечание: этот код выводит только отсортированный массив , а не число

cout  arr[n/2] ;

это «число по середине»

Эксперт CЭксперт С++

5112 / 4551 / 854
Регистрация: 07.10.2015
Сообщений: 9,462

Лучший ответ

Сообщение было отмечено k1cha как решение

Решение

k1cha, чуток подправил пузырьковую сортировку:

1 2 3 4 5 6 7 8
for (int i = 0; i  n; ++i) { for (int j = 0; j  n - i - 1; ++j) { if (arr[j] > arr[j + 1]) { swap(arr[j], arr[j + 1]); } } } cout  [n/2]  <"\n";

Эксперт функциональных языков программированияЭксперт Python

35491 / 19968 / 4183
Регистрация: 12.02.2012
Сообщений: 33,132
Записей в блоге: 13
liv, у правильной пузырьковой сортировки внешний цикл должен быть итерационным.

Эксперт CЭксперт С++

5112 / 4551 / 854
Регистрация: 07.10.2015
Сообщений: 9,462
Catstail, т.е. с проверкой на изменения?

Эксперт функциональных языков программированияЭксперт Python

35491 / 19968 / 4183
Регистрация: 12.02.2012
Сообщений: 33,132
Записей в блоге: 13

liv, я имею в виду вот что:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
int i,k=1,c; while(1) { c=0; for (i=0; in-k; i++) if (arr[i]>arr[i+1]) { t =arr[i]; arr[i] =arr[i+1]; arr[i+1]=t; c++; } if (c==0) break; k++; }

Этот код не будет делать лишних пустых циклов.

Эксперт CЭксперт С++

5112 / 4551 / 854
Регистрация: 07.10.2015
Сообщений: 9,462

ЦитатаСообщение от Catstail Посмотреть сообщение

я имею в виду вот что
и я о том же В моем случае:

1 2 3 4 5 6 7 8 9 10 11
for (int i = 0; i  n; ++i) { bool f = true; for (int j = 0; j  n - i - 1; ++j) { if (arr[j] > arr[j + 1]) { swap(arr[j], arr[j + 1]); f = false; } } if (f) break; }

87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь

Вывод отсортированного массива в файл
Задание такое: Дан список сотрудников лаборатории(10 человек) в виде ФАМИЛИЯ.

Вывод отсортированного двумерного массива
Помогите, пожалуйста. Надо переставить нулевые строки в верхнюю часть. Эти строки ищутся.

Вывод в richTextBox отсортированного массива
Нужно сортировать массив по возрастанию.Выводился в richTextBox исходный массив и массив после.

Вывод отсортированного массива,в текстовой файл
В общем,написан код сортировки по убыванию в столбце,запускаю прогу,он правильно сортирует но в.

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

Вывод односвязного списка, отсортированного по алфавиту
Возник такой вопрос: не получается вывести список на экран, функция просто не работает. Буду.

Или воспользуйтесь поиском по форуму:

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

Вот мой код массива, мне нужно отсортировать его по возрастанию, (т.е от 0 до 40). Не очень понимаю как это сделать, если сможете показать уже отредактированный код, буду очень благодарен!

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 #include #include using namespace std; int main() { int X[40], Y[20]; int n = 0; int k = 0; for (int i = 0; i  40; i++) { X[i] = -25 + (rand() % 50); cout  <"X["   <"]: "  [i]  <"\n"; } for (int i = 0; i  40; i++) { if (X[i] % 2 == 0) { Y[k] = X[i]; k++; } } sort(Y, Y + 20); for (int i = 0; i  20; i++) { if (Y[i] > 0) cout  <"Y["   <"]: "  [i]  <"\n"; } system("pause"); return 0; }

Лучшие ответы ( 2 )
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

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

Сортировка массива по возрастанию
Я новичок в программировании, помогите пожалуйсто отсортировать массив по возрастанию. Нужен какой.

Сортировка массива по возрастанию
Код работает через раз, иногда всё норм, иногда дублирует некоторые элементы (чаще всего два.

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

7430 / 5022 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
напишите оригинал условия задачи
Регистрация: 30.11.2019
Сообщений: 13

Yetty, Массив Х содержит 40 действительных чисел. Переписать в массив Y положительные элементы массива Х с четными номерами и отсортировать его по возрастанию.

7430 / 5022 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692

Лучший ответ

Сообщение было отмечено vanskor38 как решение

Решение

ЦитатаСообщение от vanskor38 Посмотреть сообщение

отсортировать его по возрастанию
я так понимаю его — это массив Y ?

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
#include #include #include using namespace std; int main() { srand((int)time(0)); int p=0, m=0; const int n=40; double X[n]; cout  "Array X:\n"; for (int i = 0; i  n; i++) { X[i]=0.1*(rand()%199-99); if (i%2==1 && X[i]>0.) p++; cout  X[i]  " "; if ((i+1)%20==0) cout  "\n"; } double*Y = new double[p]; for (int i = 0; i  n; i++) if (i%2==1 && X[i]>0.) Y[m++]=X[i]; cout  "Array Y:\n"; for (int i = 0; i  p; i++) cout  Y[i]  " "; cout  "\n"; for (int i=0; ip-1; i++) for (int j=0; jp-i-1; j++) if (Y[j] > Y[j+1]) swap(Y[j], Y[j+1]); cout  "Sorted array Y:\n"; for (int i = 0; i  p; i++) cout  Y[i]  " "; cout  "\n"; delete[]Y; system("pause"); return 0; }

Какое число окажется в середине если расставить элементы массива по возрастанию c

Познакомившись с циклами, переменными, условными конструкциями и массивами, рассмотрим несколько задач для работы с массивами.

Количество положительных чисел

Найдем количество положительных чисел в массиве:

int[] numbers = < -4, -3, -2, -1, 0, 1, 2, 3, 4 >; int result = 0; foreach(int number in numbers) < if(number >0) < result++; >> Console.WriteLine($"Число элементов больше нуля: ");

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

Инверсия массива

Вторая задача — инверсия массива, то есть переворот его в обратном порядке:

int[] numbers = < -4, -3, -2, -1,0, 1, 2, 3, 4 >; int n = numbers.Length; // длина массива int k = n / 2; // середина массива int temp; // вспомогательный элемент для обмена значениями for(int i=0; i < k; i++) < temp = numbers[i]; numbers[i] = numbers[n - i - 1]; numbers[n - i - 1] = temp; >foreach(int i in numbers) < Console.Write($"\t"); >

Поскольку нам надо изменять элементы массива, то для этого используется цикл for. Алгоритм решения задачи подразумевает перебор элементов до середины массива, которая в программе представлена переменной k, и обмен значений элемента, который имеет индекс i, и элемента с индексом n-i-1.

Программа сортировки массива

Теперь возьмем задачу посложнее — простейшую сортировку массива:

int[] nums = < 54, 7, -41, 2, 4, 2, 89, 33, -5, 12 >; // сортировка int temp; for (int i = 0; i < nums.Length - 1; i++) < for (int j = i + 1; j < nums.Length; j++) < if (nums[i] >nums[j]) < temp = nums[i]; nums[i] = nums[j]; nums[j] = temp; >> > // вывод Console.WriteLine(«Вывод отсортированного массива»); for (int i = 0; i

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

Во внешнем цикле мы берем элемент, который будем сравнивать:

for (int i = 0; i < nums.Length - 1; i++)

Далее запускаем вложенный цикл, который начинается, со следующего элемента, и из которого извлекаем элементы, с которыми будем сравнивать тот элемент, которые берется из массива во внешнем цикле:

for (int j = i + 1; j < nums.Length; j++)

Если элемент с меньшим индексом больше элемента с большим индексом, то меняем элементы местами.

if (nums[i] > nums[j])

В конце выводим все элементы.

Язык Си в примерах/Сортировка

Задача «сортировки» (упорядочения) — одна из первых интересных и сложных задач теории алгоритмов. Общие принципы освещает статья «Алгоритмы сортировки», здесь же мы рассматриваем способы упорядочения посредством языка Си.

Метод «пузырька» [ править ]

Один из простейших алгоритмов решения — метод «пузырька».

#include int main()  int n, i, j; scanf_s("%d", &n); int a[n]; // считываем количество чисел n // формируем массив n чисел for(i = 0 ; i  n; i++)  scanf_s("%d", &a[i]); > for(i = 0 ; i  n - 1; i++)  // сравниваем два соседних элемента. for(j = 0 ; j  n - i - 1 ; j++)  if(a[j] > a[j+1])  // если они идут в неправильном порядке, то // меняем их местами. int tmp = a[j]; a[j] = a[j+1] ; a[j+1] = tmp; > > > > 

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

Задача: Докажите, что достаточно n − 1 пробега, чтобы элементы массива упорядочились.

Решив эту задачу, вы докажете, что метод «пузырька» решает задачу сортировки.

Функция qsort из библиотеки stdlib [ править ]

Два оператора for, в которых происходит сортировка, можно заменить на одну строку:

qsort(a, n, sizeof(int), cmp ); 

Это функция, описанная в стандартной библиотеке ANSI C и объявлена в заголовочном файле stdlib.h.

Поэтому в начале программы нужно добавить

#include

Функцией qsort можно упорядочивать объекты любой природы. По сути, она предназначена упорядочивать множества блоков байтов равной длины. Второй аргумент функции — это число таких блоков, третий аргумент — длина каждого блока. Первый аргумент — это адрес, где находится начало первого блока (предполагается, что блоки в памяти расположены друг за другом подряд).

Четвёртый аргумент функции qsort — это имя функции, которая умеет сравнивать два элемента массива. В нашем случае это

int cmp(const void *a, const void *b)  return *(int*)a - *(int*)b; > 

В силу указанной универсальности функции сортировки, функция сравнения получает в качества аргумента адреса двух блоков, которые нужно сравнить и возвращает 1, 0 или -1:

положительное значение, если a > b 0, если a == b отрицательное значение, если a < b

Поскольку у нас блоки байт -- это целые числа (в 32-битной архитектуре это четырёхбайтовые блоки), то необходимо привести данные указатели типа (const void*) к типу (int *) и осуществляется это с помощью дописывания перед указателем выражения «(const int*)». Затем нужно получить значение переменной типа int, которая лежит по этому адресу. Это делается с помощью дописывания спереди звездочки.

Таким образом, мы получили следующую программу

#include #include #define N 1000 int cmp(const void *a, const void *b)  return *(int*)a - *(int*)b; > int main()  int n, i,j; int a[N]; scanf("%d", &n); for(i = 0 ; i  n; i++)  // ЧИТАЕМ ВХОД scanf("%d", &a[i]); > qsort(a, n, sizeof(int), cmp ); // СОРТИРУЕМ for(i = 0 ; i  n; i++)  // ВЫВОДИМ РЕЗУЛЬТАТ printf("%d ", a[i]); > return 0; > 

Динамическое выделение памяти [ править ]

Ниже приведена программа, где память под массив выделяется динамически:

#include #include #include int cmp(const void *a, const void *b)  return *(int*)a - *(int*)b; > int main()  int n, i; int *a; scanf("%d", &n); a = (int*) malloc(sizeof(int)*n); for(i = 0 ; i  n; i++)  scanf("%d", &a[i]); > qsort(a, n, sizeof(int), cmp ); for(i = 0 ; i  n; i++)  printf("%d ", a[i]); > free(a); return 0; > 

Функция malloc (от англ. memory allocation --- выделение памяти) делает запрос к ядру операционной системы по выделению заданного количества байт. Единственный аргумент этой функции — число байт, которое вам нужно. В качестве результата функция возвращает указатель на начало выделенной памяти. Указатель на начало выделенной памяти &mbsah — это адрес ячейки памяти, начиная с которого идут N байт, которые вы можете использовать под любые свои нужды. Всю память, которая была выделена с помощью функции malloc, нужно освобождать с помощью функции free. Аргумент функции free — это указатель на начало выделенной когда-то памяти.

Программа упорядочения строк в алфавитном порядке [ править ]

#include #include #include #define N 100 #define M 30 int main(int argc, char* argv[])  char a[N][M]; int n, i; scanf("%d", &n); for (i=0; in; i++) scanf("%s", &a[i]); qsort(a, n, sizeof(char[M]), (int (*)(const void *,const void *)) strcmp); for (i=0; in; i++) printf("%s\n", a[i]); return 0; > 

Обратите внимание на сложное приведение типов.

Функция strcmp, объявленная в файле string.h имеет следующий прототип:

int strcmp(const char*, const char*);

То есть функция получает два аргумента -- указатели на кусочки памяти, где хранятся элементы типа char, то есть два массива символов, которые не могут быть изменены внутри функции strcmp (запрет на изменение задается с помощью модификатора const) [1] .

В то же время в качестве четвертого элемента функция qsort хотела бы иметь функцию типа

int cmp(const void*, const void*);

В языке Си можно осуществлять приведение типов являющихся типами функции. В данном примере тип

int (*)(const char*, const char*); // функция, получающая два элемента типа 'const char *' и возвращающая элемент типа 'int'

приводится к типу

int (*)(const void*, const void*); // функция, получающая два элемента типа 'const void *' и возвращающая элемент типа 'int'

Примечания [ править ]

  1. ^ Функция strcmp в соответствии с описанием, выдаваемым командой man 3 strcmp, осуществляет сравнение двух строк и определяет, какая из двух строк идёт первой в алфавитном порядке (сравнивает две строки в лексикографическом порядке), а именно: она возвращает значение больше нуля, если первая строка "больше" второй (идёт после второй в алфавитном порядке), 0 – если они совпадают, и значение меньше нуля– если первая строка "меньше" второй.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *