Поставленная задача:
Напишите программу, сортирующую элементы массива по возрастанию методом прямого выбора.
Алгоритм:
Допустим дан числовой массив из N элементов. Надо отсортировать его по возрастанию. Находим наибольший элемент в массиве и меняем его местами с последним. Уменьшаем количество рассматриваемых элементов на 1 (так как последний элемент уже на свеем месте). Повторяем операцию для уменьшенного на единицу массивы. Итак N-1 раз.
Исходный код:
#define SZ 5
#include <conio.h>
void main ()
{
clrscr ();
int a[SZ];
int i, min, j, buf; k;
printf ("Vvedite massiv (v odnoi stroke %i",SZ);
printf ("celix chisel)i nawmite <Enter>\n");
printf ("->");
//заполнение массива вручную
for (k=0;k < SZ;k++)
scanf ("%i",&a[k]);
printf ("Sortirovka...\n");
//the end
//операции с массивом по сортировке
for (i=0;i < SZ-1;i++)
{
min=i;
for (j=i+1;j<SZ;j++)
if (a<a[min])
min=j;
buf=a;
a=a[min];
a[min]=buf;
for(k=0;k<SZ;k++)
printf ("%i",a[k]);
printf("\n");
}
printf ("Massiv otsortirovan\n");
for (k=0;k<SZ;k++)
printf("%i",a[k]);
printf("\n");
printf("\n");
getch ();
}
Теория:
Есть ещё...
Сравниваются попарно стоящие рядом элементы и если порядок их следования не правильный, то они обмениваются местами. Если они упорядочены, то ничего не делается, иначе эти два элемента обмениваются местами. Потом сравниваются следующие два элемента и так до конца массива. В результате отдельных попарных перестановок макс(мин) перемещается в конец массива. Он движется по массиву как пузырек всплывает в воде, когда встречаются элементы с макс(мин) значением.
После того, как макс(мин) передвинут в конец массива, вся процедура повторяется с начала и до элемента с индексом N-1 раз, затем до индекса N-2 и т.д.
Если вам нравится то, что мы пишем, пожалуйста, нажмите на интересующую вас рекламу сбоку, сверху, или сразу после статьи. Будет стимул писать лучше и чаще. Хорошего вам дня.