Сортировка массива целых чисел в порядке неубывания с помощью сортировки кучей - C (СИ)

Узнай цену своей работы

Формулировка задачи:

В первой строке входного файла находится число n - кол-во чисел в массиве. Во второй строке находятся n целых чисел.

Решение задачи: «Сортировка массива целых чисел в порядке неубывания с помощью сортировки кучей»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
void build(int*, int );
void heap(int*, int);
int main(void)
{ 
FILE *fin;
int *a,n,i;
 
fin=fopen("input.txt", "r");
 
fscanf(fin,"%d", &n);
a=(int*)malloc(n*sizeof(int));
for (i=0; i<n; i++)
fscanf(fin,"%d", &a[i]);
printf("pervona4alniy vid\n");
for (i=0; i<n; i++)
printf("%d ", a[i]);
printf("\n");
build(a, n);
printf("\n postroenie\n");
for (i=0; i<n; i++)
printf("%d ", a[i]);
heap(a,n);
printf("\n kone4niy vid\n");
for (i=0; i<n; i++)
printf("%d ", a[i]);
printf("\n");
return 0;
}
/* ------------ */
void build(int *a, int n)
{ int i,j,k,temp;
for (i=0; i<n/2; i++)
{
j=2*i+1;
k=i;
if ((a[j+1]>a[j])&&(j+1<n)) j++;
while ((j>0)&&(a[j]>a[k]))
{
temp=a[j];
a[j]=a[k];
a[k]=temp;
j=k;
k=(k-1)/2;
} }
}
/* -------------*/
void heap(int *a, int n)
{ int nn,temp,i;
nn=n;
while (nn>0)
{
temp=a[0];
a[0]=a[nn-1];
a[nn-1]=temp;
nn--;
build(a,nn);
 
for (i=0; i<n; i++) printf("%d ", a[i]);
}
}

Объяснение кода листинга программы

В этом коде реализуется сортировка массива целых чисел в порядке неубывания с помощью сортировки кучей. Список действий:

  1. Сначала открывается файл input.txt для чтения (строка 7).
  2. Затем считывается количество целых чисел, которые будут храниться в массиве (строка 8).
  3. Выделяется память под массив целых чисел (строка 9).
  4. В цикле с помощью функции fscanf считываются сами числа и записываются в массив (строка 10).
  5. Выводится первый вариант массива (строка 12).
  6. Вызывается функция build, которая выполняет сортировку массива методом куча (строка 13).
  7. Выводится второй вариант массива (строка 15).
  8. Вызывается функция heap, которая выполняет сортировку массива методом куча (строка 16).
  9. Выводится третий вариант массива (строка 18).
  10. Закрывается файл input.txt (строка 20). Структура функции build:
  11. Создается новая переменная j = 2*i + 1 (строка 23).
  12. При условии (a[j+1]>a[j])&&(j+1<n) выполняется j++ (строка 24).
  13. Пока a[j] больше a[k], происходит обмен a[j] и a[k] (строки 26-28).
  14. Если a[j] больше a[k], то значение j уменьшается на единицу (строка 29).
  15. Значение k уменьшается на единицу (строка 30).
  16. Цикл while выполняется до тех пор, пока k больше нуля (строка 31). Структура функции heap:
  17. Создается новая переменная nn = n (строка 36).
  18. Пока nn больше нуля, выполняется следующий обмен: a[0] = a[nn-1], a[nn-1] = a[0] (строки 37-38).
  19. Вызывается функция build с аргументами a и nn (строка 39).
  20. В цикле с помощью функции printf выводятся все числа массива (строка 40).
  21. nn уменьшается на единицу (строка 41).
  22. Цикл while выполняется до тех пор, пока nn больше нуля (строка 42).

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 3.583 из 5
Похожие ответы