Сортировка массива
Сортировка массива в Си
На этом уроке мы напишем программу на си для сортировки массива. Программа задает случайным образом массив и сортирует массив и выводит на экран отсортированный массив Проиллюстрируем метод сортировки на конкретном примере. Допустим,задан массив {5,10,13,1,45,76}. Нам нужноотсортировать его от большего к меньшему. Так чтобы в конце был массив {76,45,13,10,5,1}.Найдем максимальный элемент это будет 76, поставим его на первое место, получим {76, 10,13,1,45,5}.Теперь рассмотрим массив уже без первого члена {10,13,1,45,5} найдем в нем максимальный элемент и поставим его на первое место, получим {45, 13,1,10,5}.Так
далее всегда будем искать максимальный элемент в оставшемся массиве и будем ставить его вверх.
При написании программы будут полезен урок Массивы в Си.
Напишем процедуру вывода массива. Чтобы передать в Си массив в процедуру в качестве параметра нужно указать тип и массив с пустыми скобками название процедуры (тип массива имя массива[])
// процедура вывода массива на экран
void vivod(int B[])
{
int i;
printf(" ");
// пробегаемся по всем элементам массива
for (i=0; i<num;i++)
{
printf ("%d
", B[i]);
}
}
Задаём случайным образом массив в Си
//задаем элементы массива случайным образом
for (i=0; i<num; i++)
{
a[i]=rand()%range+1;
}
Для каждого места в массиве определяем максимальный элемент в оставшемся массиве и ставим его на это место.
В переменной i будет сохраняться текущая позиция массива, в переменной k будет храниться номер макисмального элемента в оставшемся массиве
// пробегаемся по всем элементам массива
for (i=0; i<num;i++)
{
max=a[i];
k=i;
// ищем максимум в оставшееся массиве
for (j=i+1; j<num; j++)
{
// если элемент больше то изменяем максимум на него
if (a[j]>max)
{
k=j;
max=a[j]; }
}
// ставим максимальный элемент наверх
c=a[i];
a[i]=a[k];
a[k]=c;
}
Пример решения:
//сортировка массива
#include<iostream.h>
#include<conio.h>
#include<stdlib.h>
int num=10;// количество элементов в массиве
int range=20; // диапазон случайных значений элементов массива
// процедура вывода массива на экран
void vivod(int B[])
{
int i;
printf(" ");
// пробегаемся по всем элементам массива
for (i=0; i<num;i++)
{
printf ("%d
", B[i]);
}
}
int main()
{
int a[20];// объявление целочисленного массива a из 10 элементов
int i, j;// переменная для работы с массивом в цикле
int k; // номер максимального элемента в оставшемся массиве
int c;
int max;// максимум в оставшемся массиве
//задаем элементы массива случайным образом
for (i=0; i<num; i++)
{
a[i]=rand()%range+1;
}
// вывод получившегося массива
vivod(a);
getch();
// пробегаемся по всем элементам массива
for (i=0; i<num;i++)
{
max=a[i];
k=i;
// ищем максимум в оставшемся массиве
for (j=i+1; j<num; j++)
{
// если элемент больше то изменяем максимум на него
if (a[j]>max)
{
k=j;
max=a[j];
}
}
// ставим максимальный элемент наверх
c=a[i];
a[i]=a[k];
a[k]=c;
}
printf("отсортированный
");
vivod(a);
getch();
}
На заметку:
1. В процедуру как параметр можно передать целый массив для этого достаточно указать тип имя и [] при этом исходный массив меняться не будет. Например void vivod (int B[]. При вызове данной процедуры достаточно
подставить имя массива, которое будет передано в процедуру. Например vivod(a).
2.Чтобы поменять местами элементы массива необходимо использовать переменную такого же типа. Например нужно поменять местами a[i] и a[j].
с=a[i];
a[i]=a[j];
a[j]=c;
Задания для самостоятельной работы:
1 Отсортировать массив по возрастанию. Вначале самый маленький, в конце самый большой.
Полезно почитать по теме массивы в си
Массивы в си
Программа на си анимация нескольких объектов
Поделиться
Нет комментариев. Ваш будет первым!