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