Добавил:
okley
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:2 семестр / sr15
.c#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(©_m);
SortInpOpt(©_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(©_m, N);
// printm(©_m2, N);
}
