Сортировка массива

12 сентября 2018 - Администратор

Сортировка массива в Си

На этом уроке мы напишем программу на си для сортировки массива. Программа задает случайным образом массив и сортирует массив и выводит на экран отсортированный массив Проиллюстрируем метод сортировки на конкретном примере. Допустим,задан массив {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 Отсортировать массив по возрастанию. Вначале самый маленький, в конце самый большой.

Вернуться к содержанию

Полезно почитать по теме массивы в си
Массивы в си
Программа на си анимация нескольких объектов

Поделиться

 
Комментарии (0)

Нет комментариев. Ваш будет первым!