C/C++

Написать программу на Си

Написать программу для сортировки одномерного массива по убыванию методом бинарных вставок. Размерность массива, а также границы диапазона изменения элементов N и M вводятся пользователем с клавиатуры, а сам массив заполняется случайными числами из указанного пользователем диапазона. Сортировку массива и генерацию массива оформить в виде отдельных функций.
#include
#include
#include
#include
#include

void MakeArr(int arr[], int s, int nn, int mm);
void PrintArr(int arr[], int s);
void InsertionSort(int arr[], int s);

int main()
{
system("chcp 1251 > nul");
SetConsoleTitle("ОтветыМейлРу"); // Русские буквы
srand (time(NULL));

int sz; printf("Введите размер массива= "); scanf("%d", &sz);

int N,M;
printf("Введите минимальное значение элемента= "); scanf("%d", &N);
printf("Введите максимальное значение элемента= "); scanf("%d", &M);

int *marr= (int *) malloc(sz*sizeof(int));
if (marr==NULL) { printf("Ошибка выделения памяти"); exit (1); }

MakeArr(marr,sz,N,M);
PrintArr(marr,sz);
InsertionSort(marr, sz);
system("pause");
PrintArr(marr,sz); system("pause");

printf("Освобождаем память\n");
free (marr);

printf("\n"); system("pause");
return 0;
}
void MakeArr(int arr[], int s, int nn, int mm)
{
printf("Создаём массив\n");
int el=0;
while (el<s)
{
arr[el] = rand() % mm - nn; el++;
}
}
void PrintArr(int arr[], int s)
{
printf("\nВыводим массив\n");
for (int el=0; el<s; el++)
{
printf("%d\t", arr[el]);
}
}
void InsertionSort(int arr[], int s)
{
printf("\nСортируем массив\n");

int x,left,right,sred;

for (int i=1; iarr[i])

{

x=arr[i]; // x – включаемый элемент

left=0; // левая граница отсортированной части массива

right=i-1; // правая граница отсортированной части массива

do {

sred = (left+right)/2; // sred – новая "середина" последовательности

if (arr[sred]<x ) left= sred+1;

else right=sred-1;

} while (left<=right); // поиск ведется до тех пор, пока левая граница не окажется правее правой границы

for (int j=i-1; j>=left;j--) arr[j+1]= arr[j];

arr[left]= x;

}

}

printf("\nСортировка завершена\n");
}
Владимир Бокачев
Владимир Бокачев
21 700
Лучший ответ