Сортировки. Напишите пожалуйста что означает каждая строка - 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;
}

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

  1. com и as - это счетчики, используемые внутри функций сортировки для отслеживания количества сравнений и присваиваний соответственно.
  2. Функция bubble реализует сортировку пузырьком. Она проходит по массиву несколько раз, сравнивая соседние элементы и меняя их местами, если они находятся в неправильном порядке. Процесс продолжается до тех пор, пока массив не будет полностью отсортирован.
  3. Функция choice реализует сортировку выбором. Она находит минимальный элемент в неотсортированной части массива и меняет его местами с первым элементом неотсортированной части. Затем функция рекурсивно вызывает себя для сортировки оставшейся части массива.
  4. Функция insert реализует сортировку вставками. Она проходит по массиву, сравнивая каждый элемент с текущим элементом и, если текущий элемент больше следующего элемента, вставляет текущий элемент перед следующим элементом.
  5. Функция sort реализует сортировку слиянием. Она разделяет массив на две половины, сортирует каждую половину отдельно, а затем объединяет две отсортированные половины в один отсортированный массив.
  6. Функция interflow реализует сортировку слиянием. Она разделяет массив на две половины, сортирует каждую половину отдельно, а затем объединяет две отсортированные половины в один отсортированный массив.
  7. В функции main сначала определяется размер массива и тип заполнения массива. Затем массив заполняется случайными, возрастающими или убывающими значениями в зависимости от выбранного типа заполнения.
  8. Затем пользователю предлагается выбрать тип сортировки. В зависимости от выбранного типа сортировки вызывается соответствующая функция сортировки, которая сортирует массив и выводит отсортированный массив на экран.
  9. После сортировки выводится количество сравнений и присваиваний, а также время, затраченное на сортировку.

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


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

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

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