Все элементы массива, стоящие до максимального элемента, упорядочить по возрастанию - C (СИ)
Формулировка задачи:
Дан линейный массив из n элементов. Все элементы, стоящие до максимального элемента, упорядочите по возрастанию, а элементы, расположенные после него – по убыванию.
Например: 231456123= 123456321 как то вот так.Помогите не получается блин...
Решение задачи: «Все элементы массива, стоящие до максимального элемента, упорядочить по возрастанию»
textual
Листинг программы
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
int array[] = {2, 3, 1, 4, 5, 6, 1, 2, 3};
size_t nArray = sizeof(array) / sizeof(*array);
size_t i, j, cur;
int tmp;
for (i = 0; i < nArray; ++i)
{
printf("%d ", array[i]);
}
printf("\n");
size_t max = 0;
for (i = 1; i < nArray; ++i)
{
if (array[max] < array[i])
{
max = i;
}
}
for (i = 0; i < max - 1; ++i)
{
cur = i;
for (j = i + 1; j < max; ++j)
{
if (array[cur] > array[j])
{
cur = j;
}
}
tmp = array[cur];
array[cur] = array[i];
array[i] = tmp;
}
for (i = max + 1; i < nArray - 1; ++i)
{
cur = i;
for (j = i + 1; j < nArray; ++j)
{
if (array[cur] < array[j])
{
cur = j;
}
}
tmp = array[cur];
array[cur] = array[i];
array[i] = tmp;
}
for (i = 0; i < nArray; ++i)
{
printf("%d ", array[i]);
}
printf("\n");
system("pause");
return 0;
}
Объяснение кода листинга программы
- Объявлен массив
arrayтипаintс 9 элементами. - Переменная
nArrayинициализируется значением, равным результату деленияsizeof(array)наsizeof(*array), то есть на размер одного элемента массива, что позволяет получить количество элементов в массиве. - В цикле
forс переменнойiот 0 доnArray - 1выводятся все элементы массива через пробел. - Переменная
maxинициализируется значением 0. Она будет использоваться для хранения индекса максимального элемента массива. - В цикле
forс переменнойiот 1 доnArray - 1происходит поиск индекса максимального элемента массива. - Переменная
curинициализируется значениемi. - В цикле
forс переменнойjотi + 1доmaxвключительно производится сравнение элементов массива, начиная с текущего элемента массива, с элементом, находящимся по индексуj. Если элемент с индексомjбольше текущего, то значение переменнойcurзаменяется наj. - Переменная
tmpинициализируется значением текущего элемента массива. - Значение текущего элемента массива заменяется на значение
tmp, а значениеtmpзаменяется на значение текущего элемента массива. - Цикл выполняется до тех пор, пока не будет найден элемент, меньший текущего.
- Переменная
curинициализируется значениемi. - В цикле
forс переменнойjотi + 1доnArrayвключительно производится сравнение элементов массива, начиная с текущего элемента массива, с элементом, находящимся по индексуj. Если элемент с индексомcurменьше текущего, то значение переменнойcurзаменяется наj. - Переменная
tmpинициализируется значением текущего элемента массива. - Значение текущего элемента массива заменяется на значение
tmp, а значениеtmpзаменяется на значение текущего элемента массива. - Цикл выполняется до тех пор, пока не будет найден элемент, больший текущего.
- Все элементы массива выводятся на экран.
- Выполняется функция
pause, предназначенная для приостановки выполнения программы до нажатия клавиши. - Программа возвращает 0, что означает успешное выполнение.