Сортировки. Напишите пожалуйста что означает каждая строка - C (СИ)
Формулировка задачи:
Всем привет. Напишите пожалуйста к каждой строке что она означает. Код не совсем мой,а друг скинул, но он занят чтобы объяснить. Ато преподаватель будет в субботу спрашивать, поэтому прошу вас
Вот сам код:
#include <stdio.h> #include <conio.h> #include <iostream> #include <time.h> #include <windows.h> #include <ctime> using namespace std; int com=0,as=0; int bubble(int *arr,int sz){ int k; for(int i=0;i<sz;i++){ for(int j=1;sz-j!=0;j++){ com++; if(arr[j]<arr[j-1]){ k=arr[j]; arr[j]=arr[j-1]; arr[j-1]=k; as=as+3; } } } return *arr; } int choice(int *arr,int sz){ int min,k,t; for(int i=0;i<sz;i++){ min=arr[i]; as++; for(int j=i+1;j<sz;j++){ com++; if(arr[j]<min){ min=arr[j]; t=j; as=as+2; } } k=arr[i]; arr[i]=min; arr[t]=k; as=as+3; } return *arr; } int insert(int *arr,int sz){ int k; for(int i=1;i<sz;i++){ for(int j=i;j>0;j--){ com++; if(arr[j-1]>arr[j]){ k=arr[j-1]; arr[j-1]=arr[j]; arr[j]=k; as=as+3; } } } return *arr; } void sort(int arr[],int low,int mid,int high){ int b[10000]; int i = low, j = mid + 1, k = 0; com=com+4; while(i <= mid && j <= high){ com++; if (arr[i] <= arr[j]){ b[k++] = arr[i++]; as++; } else{ b[k++] = arr[j++]; as++; } } while(i<=mid){b[k++]=arr[i++];as++;} while(j<=high){b[k++]=arr[j++];as++;} k--; while(k>=0){ arr[low+k]=b[k]; k--; as++; } } void interflow(int arr[],int low,int high){ com++; if (low<high) { int m=(high+low)/2; interflow(arr, low, m); interflow(arr, m + 1, high); sort(arr, low, m, high); } } int main (){ setlocale(0,"Russian"); int select=0,size=0,type=0; clock_t start,stop; srand(time(0)); printf("Размер массива = "); scanf("%i",&size); int array[size]; printf("\n1.Случайными\n2.По возрастанию\n3.По убыванию\nТип заполнения = "); scanf("%i",&type); switch(type){ case 1: for(int i=0;i<size;i++)array[i]=rand()%100; break; case 2: for(int i=0;i<size;i++)array[i]=i; break; case 3: for(int i=size-1;i>=0;i--)array[i]=size-i-1; break; default: printf("Ошибка\n"); } printf("\nНеотсортированный массив = "); for (int i=0;i<size;i++)printf("%i ",array[i]); printf("\n\n1.Пузырьковая\n2.Выбор\n3.Вставка\n4.Слияние\nТип сортировки = "); scanf("%i",&select); switch(select){ case 1: start=clock(); bubble(array,size); stop=clock(); break; case 2: start=clock(); choice(array,size); stop=clock(); break; case 3: start=clock(); insert(array,size); stop=clock(); break; case 4: start=clock(); interflow(array,0,size-1); stop=clock(); break; default: printf("ошибка"); } printf("Отсортированный массив = "); for(int i=0;i<size;i++)printf("%i ",array[i]); printf("\nКоличество сравнений = %i\n",com); printf("Количество присвоений = %i\n",as); printf("Время = %i\n",stop-start); getch(); return 0; }
Решение задачи: «Сортировки. Напишите пожалуйста что означает каждая строка»
textual
Листинг программы
#include <stdio.h> #include <time.h> int com = 0, as = 0; int bubble(int *arr, int sz) { int k = 0, i = 0, j = 0; for (i = 0; i<sz; i++) { for (j = 1; sz - j != 0; j++) { com++; if (arr[j]<arr[j - 1]) { k = arr[j]; arr[j] = arr[j - 1]; arr[j - 1] = k; as = as + 3; } } } return *arr; } int choice(int *arr, int sz) { int min = 0, k = 0, t = 0, i = 0, j = 0; for (i = 0; i<sz; i++) { min = arr[i]; as++; for (j = i + 1; j<sz; j++) { com++; if (arr[j]<min) { min = arr[j]; t = j; as = as + 2; } } k = arr[i]; arr[i] = min; arr[t] = k; as = as + 3; } return *arr; } int insert(int *arr, int sz) { int k = 0, i = 0, j = 0; for (i = 1; i<sz; i++) { for (j = i; j>0; j--) { com++; if (arr[j - 1]>arr[j]) { k = arr[j - 1]; arr[j - 1] = arr[j]; arr[j] = k; as = as + 3; } } } return *arr; } void sort(int arr[], int low, int mid, int high) { int b[10000]; int i = low, j = mid + 1, k = 0; com = com + 4; while (i <= mid && j <= high) { com++; if (arr[i] <= arr[j]) { b[k++] = arr[i++]; as++; } else { b[k++] = arr[j++]; as++; } } while (i <= mid) b[k++] = arr[i++]; as++; while (j <= high) b[k++] = arr[j++]; as++; k--; while (k >= 0) { arr[low + k] = b[k]; k--; as++; } } void interflow(int arr[], int low, int high) { int m = 0; com++; if (low<high) { m = (high + low) / 2; interflow(arr, low, m); interflow(arr, m + 1, high); sort(arr, low, m, high); } } int main() { setlocale(0, "Russian"); srand(time(0)); int select = 0, size = 0, type = 0, i = 0, *array = NULL; clock_t start = NULL, stop = NULL; printf("Размер массива = "); scanf("%i", &size); array = malloc(sizeof(int)*size); printf("\n1.Случайными\n2.По возрастанию\n3.По убыванию\nТип заполнения = "); scanf("%i", &type); switch (type) { case 1: for (i = 0; i<size; i++) array[i] = rand() % 100; break; case 2: for (i = 0; i<size; i++) array[i] = i; break; case 3: for (i = size - 1; i >= 0; i--) array[i] = size - i - 1; break; default: printf("Ошибка\n"); } printf("\nНеотсортированный массив = ");//Вывод массива на экран for (i = 0; i<size; i++) printf("%i ", array[i]); printf("\n\n1.Пузырьковая\n2.Выбор\n3.Вставка\n4.Слияние\nТип сортировки = "); scanf("%i", &select); switch (select) { case 1: start = clock(); bubble(array, size); stop = clock(); break; case 2: start = clock(); choice(array, size); stop = clock(); break; case 3: start = clock(); insert(array, size); stop = clock(); break; case 4: start = clock(); interflow(array, 0, size - 1); stop = clock(); break; default: printf("ошибка"); } printf("Отсортированный массив = "); for (i = 0; i<size; i++)//Вывод массива на экран printf("%i ", array[i]); printf("\nКоличество сравнений = %i\n", com); printf("Количество присвоений = %i\n", as); printf("Время = %i\n", stop - start); free(array); return 0; }
Объяснение кода листинга программы
com
иas
- это счетчики, используемые внутри функций сортировки для отслеживания количества сравнений и присваиваний соответственно.- Функция
bubble
реализует сортировку пузырьком. Она проходит по массиву несколько раз, сравнивая соседние элементы и меняя их местами, если они находятся в неправильном порядке. Процесс продолжается до тех пор, пока массив не будет полностью отсортирован. - Функция
choice
реализует сортировку выбором. Она находит минимальный элемент в неотсортированной части массива и меняет его местами с первым элементом неотсортированной части. Затем функция рекурсивно вызывает себя для сортировки оставшейся части массива. - Функция
insert
реализует сортировку вставками. Она проходит по массиву, сравнивая каждый элемент с текущим элементом и, если текущий элемент больше следующего элемента, вставляет текущий элемент перед следующим элементом. - Функция
sort
реализует сортировку слиянием. Она разделяет массив на две половины, сортирует каждую половину отдельно, а затем объединяет две отсортированные половины в один отсортированный массив. - Функция
interflow
реализует сортировку слиянием. Она разделяет массив на две половины, сортирует каждую половину отдельно, а затем объединяет две отсортированные половины в один отсортированный массив. - В функции
main
сначала определяется размер массива и тип заполнения массива. Затем массив заполняется случайными, возрастающими или убывающими значениями в зависимости от выбранного типа заполнения. - Затем пользователю предлагается выбрать тип сортировки. В зависимости от выбранного типа сортировки вызывается соответствующая функция сортировки, которая сортирует массив и выводит отсортированный массив на экран.
- После сортировки выводится количество сравнений и присваиваний, а также время, затраченное на сортировку.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д