Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
1
Добавлен:
16.11.2025
Размер:
3.83 Кб
Скачать
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
int K;
int N;
int prv=0, srv=0, srvOPT=0, prvOPT=0, srvQ=0, prvQ=0;
int *dinmas;
void SortInp(int **A){ // Обычный алгоритм вставкой
    int i, j, temp, aver;
    for(i=0; i<N; i++){
            j=0;
            while(j<i){
                if((*A)[i]<(*A)[j]){
                    temp=(*A)[j];
                    (*A)[j]=(*A)[i];
                    (*A)[i]=temp;
                    prv+=3;
                }
                srv++;
                j++;
            }
    }
}
void SortInpOpt(int **A){ // Оптимизированный алгоритм
    int i, j, temp, aver;
    for(i=0; i<N; i++){
            aver=0;
            for(j=0; j<i; j++){
                aver+=(*A)[j];
            }
            aver/=(i+1);
            if(A[i]<aver){
                    j=0;
                    while(j<i){
                        if((*A)[i]<(*A)[j]){
                            temp=(*A)[j];
                            (*A)[j]=(*A)[i];
                            (*A)[i]=temp;
                            prvOPT+=3;
                        }
                        srvOPT++;
                        j++;
                    }
            }
            else{
                j=i-1;
                while(j>=0){
                    if((*A)[i]<(*A)[j]){
                        temp=(*A)[j];
                        (*A)[j]=(*A)[i];
                        (*A)[i]=temp;
                        prvOPT+=3;
                        }
                    else{
                        break;
                    }
                    j--;
                    i--;
                    }
            }
    }
}
void swap(int **a, int i, int j){
    int b;
    b=(*a)[i];
    (*a)[i]=(*a)[j];
    (*a)[j]=b;
}
void QuickSort(int first, int last, int **mas) // Быстрая сортировка
{
    int pivot;
    int l,r, temp;
    l=first; r=last;
    pivot=(*mas)[(l+r)/2];
    while (l<=r) {
            while ((*mas)[l]<pivot){
                    l++;
                    srvQ++;
                    }
            srvQ++;
            while ((*mas)[r]>pivot){
                    r--;
                    srvQ++;
                    }
            srvQ++;
            if (l<=r) {
                    if(l-r){
                        temp=(*mas)[l];
                        (*mas)[l]=(*mas)[r];
                        (*mas)[r]=temp;
                        prvQ+=3;
                    }
                    l++;
                    r--;
            }
        }
    if (first<r) QuickSort(first,r, mas);
    if (l<last) QuickSort(l,last, mas);
}
void printm(int **a, int n){ // Вывод
    int l;
    for(l=0; l<n; l++){
        printf("%3d", l+1);
    }
    printf("\n");
    for(l=0; l<n; l++){
        printf("%3d", (*a)[l]);
    }
    printf("\n");
    printf("\n");
}
int main(void){
    int j, k, i;
    K=0;
    int *copy_m, *copy_m2;
    scanf("%d", &N);
    dinmas = (int *) malloc(N * sizeof (int));
    if(dinmas == NULL){
        exit(EXIT_FAILURE);
    }
    copy_m = (int *) malloc(N * sizeof (int));
    if(copy_m == NULL){
        exit(EXIT_FAILURE);
    }
    copy_m2 = (int *) malloc(N * sizeof (int));
    if(copy_m2 == NULL){
        exit(EXIT_FAILURE);
    }
    for(j=0; j<N; ++j){
        scanf("%d", &dinmas[j]);
    }
    for(j=0; j<N; ++j){
        copy_m[j]=dinmas[j];
    }
    for(j=0; j<N; ++j){
        copy_m2[j]=dinmas[j];
    }
    QuickSort(0, (N-1), &dinmas);
    SortInp(&copy_m);
    SortInpOpt(&copy_m2);
    printf("Classic - %d %d\n", srv, prv);
    printf("Advanced - %d %d\n", srvOPT, prvOPT);
    printf("Fast - %d %d\n", srvQ, prvQ);
//    printm(&dinmas, N);
//    printm(&copy_m, N);
//    printm(&copy_m2, N);
}
Соседние файлы в папке 2 семестр