вывод отсортированного числа по середине
Условие
Какое число окажется в середине, если расставить элементы массива по возрастанию?
Формат входных данных
В первой строке вводится нечетное натуральное число N (N < 1000) - количество элементов в массиве.
В следующей строке вводятся N натуральных чисел, не превосходящих 109.
входные данные
выходные данные
5
6 2 7 4 2
Лучшие ответы ( 2 )
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:
Вывод отсортированного списка на экран
Здравствуйте! Задание программы: составить список упорядоченный по фамилии и вывести его на.
Вывод на экран отсортированного массива
Помогите написать вывод отсортированного массива в самом конце, где пустые фигурные скобки, в.
35491 / 19968 / 4183
Регистрация: 12.02.2012
Сообщений: 33,132
Записей в блоге: 13
Сообщение было отмечено k1cha как решение
Решение
Сообщение от k1cha
Примечание: этот код выводит только отсортированный массив , а не число
cout arr[n/2] ;
это «число по середине»
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";
35491 / 19968 / 4183
Регистрация: 12.02.2012
Сообщений: 33,132
Записей в блоге: 13
liv, у правильной пузырьковой сортировки внешний цикл должен быть итерационным.
5112 / 4551 / 854
Регистрация: 07.10.2015
Сообщений: 9,462
Catstail, т.е. с проверкой на изменения?
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++; }
Этот код не будет делать лишних пустых циклов.
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'
Примечания [ править ]
- ^ Функция strcmp в соответствии с описанием, выдаваемым командой man 3 strcmp, осуществляет сравнение двух строк и определяет, какая из двух строк идёт первой в алфавитном порядке (сравнивает две строки в лексикографическом порядке), а именно: она возвращает значение больше нуля, если первая строка "больше" второй (идёт после второй в алфавитном порядке), 0 – если они совпадают, и значение меньше нуля– если первая строка "меньше" второй.