LINUX.ORG.RU

История изменений

Исправление LINUX-ORG-RU, (текущая версия) :

Как то так. (вроде ничего не перепутал)

#include <stdlib.h>
#include <assert.h>
#include <stdio.h>
#include <time.h>
/*----------------------------------------------------*/
static int my_cmp(const void *left, const void *right) {
    return (*(int*)left > *(int*)right);
}
/*-----------------------------------------------------*/
void swap_local(int *left, int *right) {
    int temp = 0;
    temp = *right;
    *right = *left;
    *left = temp;
}

void sort_by_swap(int arrays[], int left, int right) {
    if (left >= right) {
        return;
    }
    for (int i = left; i <= right; ++i) {
        if (arrays[left] > arrays[i]) {
            swap_local(&arrays[left], &arrays[i]);
        }
    }
    sort_by_swap(arrays, ++left, right);
}
/*------------------------------------------------------*/
void x_sort_by_swap(int arrays[], int left, int right) {
    if (left >= right) {
        return;
    }
    for (int i = left; i <= right; ++i) {
        if (arrays[left] > arrays[i])
        {
            int swaps = arrays[i];
            arrays[i]=arrays[left];
            arrays[left]=swaps;
        }
    }
    x_sort_by_swap(arrays, ++left, right);
}
/*-----------------------------------------------------*/
void y_sort_by_swap(int arrays[], int left, int right) {
    if (left >= right) {
        return;
    }
    for (int x = left; x < right; x++)
    for (int i = x; i <= right; ++i) {
        if (arrays[left] > arrays[i])
        {
            int swaps = arrays[i];
            arrays[i]=arrays[left];
            arrays[left]=swaps;
        }
    }
}
/*-----------------------------------------------------*/

int main(int argc, char *argv[])
{
    int size = 500;
    if ( argc > 1 )
    {
        sscanf(argv[1],"%d",&size);
    }
    int * data = malloc(sizeof(int)*size+1);
    assert(data);

    //printf("---sbs----------------\n");
    srandom(684168464);
    for (int i = 0; i < size; data[i++]=random());
    time_t sbs_start = clock();
    sort_by_swap(data,0,size);
    time_t sbs_final = clock();
    //for (int i = 0; i < size; printf("%d\n",data[i++]));

    //printf("---qsort--------------\n");
    srandom(684168464);
    time_t qst_start = clock();
    for (int i = 0; i < size; data[i++]=random());
    qsort(data, size, sizeof(int), my_cmp);
    time_t qst_final = clock();
    //for (int i = 0; i < size; printf("%d\n",data[i++]));

    //printf("---xbs---------------\n");
    srandom(684168464);
    for (int i = 0; i < size; data[i++]=random());
    time_t xbs_start = clock();
    x_sort_by_swap(data,0,size);
    time_t xbs_final = clock();
    //for (int i = 0; i < size; printf("%d\n",data[i++]));
    
    //printf("---ybs---------------\n");
    srandom(684168464);
    for (int i = 0; i < size; data[i++]=random());
    time_t ybs_start = clock();
    y_sort_by_swap(data,0,size);
    time_t ybs_final = clock();
    //for (int i = 0; i < size; printf("%d\n",data[i++]));


    printf("sort_by_swap.. на %d элементов потратил %lf секунды\n",size,(double)(sbs_final-sbs_start)/CLOCKS_PER_SEC);
    printf("x_sort_by_swap на %d элементов потратил %lf секунды\n",size,(double)(xbs_final-xbs_start)/CLOCKS_PER_SEC);
    printf("y_sort_by_swap на %d элементов потратил %lf секунды\n",size,(double)(ybs_final-ybs_start)/CLOCKS_PER_SEC);
    printf("qsort......... на %d элементов потратил %lf секунды\n",size,(double)(qst_final-qst_start)/CLOCKS_PER_SEC);

    return 0;
}
dron@gnu:~/Рабочий-стол/ыыы$ gcc main.c ; ./a.out 5000
sort_by_swap.. на 5000 элементов потратил 0.134655 секунды
x_sort_by_swap на 5000 элементов потратил 0.121517 секунды
y_sort_by_swap на 5000 элементов потратил 0.071896 секунды
qsort......... на 5000 элементов потратил 0.000741 секунды
dron@gnu:~/Рабочий-стол/ыыы$ 

Если непонятно, я из твоего решения поочерёдно выкинул лишние функции.

Исправление LINUX-ORG-RU, :

Как то так. (вроде ничего не перепутал)

#include <stdlib.h>
#include <assert.h>
#include <stdio.h>
#include <time.h>
/*----------------------------------------------------*/
static int my_cmp(const void *left, const void *right) {
    return (*(int*)left > *(int*)right);
}
/*-----------------------------------------------------*/
void swap_local(int *left, int *right) {
    int temp = 0;
    temp = *right;
    *right = *left;
    *left = temp;
}

void sort_by_swap(int arrays[], int left, int right) {
    if (left >= right) {
        return;
    }
    for (int i = left; i <= right; ++i) {
        if (arrays[left] > arrays[i]) {
            swap_local(&arrays[left], &arrays[i]);
        }
    }
    sort_by_swap(arrays, ++left, right);
}
/*------------------------------------------------------*/
void x_sort_by_swap(int arrays[], int left, int right) {
    if (left >= right) {
        return;
    }
    for (int i = left; i <= right; ++i) {
        if (arrays[left] > arrays[i])
        {
            int swaps = arrays[i];
            arrays[i]=arrays[left];
            arrays[left]=swaps;
        }
    }
    x_sort_by_swap(arrays, ++left, right);
}
/*-----------------------------------------------------*/
void y_sort_by_swap(int arrays[], int left, int right) {
    if (left >= right) {
        return;
    }
    for (int x = left; x < right; x++)
    for (int i = x; i <= right; ++i) {
        if (arrays[left] > arrays[i])
        {
            int swaps = arrays[i];
            arrays[i]=arrays[left];
            arrays[left]=swaps;
        }
    }
}
/*-----------------------------------------------------*/

int main(int argc, char *argv[])
{
    int size = 500;
    if ( argc > 1 )
    {
        sscanf(argv[1],"%d",&size);
    }
    int * data = malloc(sizeof(int)*size+1);
    assert(data);

    //printf("---sbs----------------\n");
    srandom(684168464);
    for (int i = 0; i < size; data[i++]=random());
    time_t sbs_start = clock();
    sort_by_swap(data,0,size);
    time_t sbs_final = clock();
    //for (int i = 0; i < size; printf("%d\n",data[i++]));

    //printf("---qsort--------------\n");
    srandom(684168464);
    time_t qst_start = clock();
    for (int i = 0; i < size; data[i++]=random());
    qsort(data, size, sizeof(int), my_cmp);
    time_t qst_final = clock();
    //for (int i = 0; i < size; printf("%d\n",data[i++]));

    //printf("---xbs---------------\n");
    srandom(684168464);
    for (int i = 0; i < size; data[i++]=random());
    time_t xbs_start = clock();
    x_sort_by_swap(data,0,size);
    time_t xbs_final = clock();
    //for (int i = 0; i < size; printf("%d\n",data[i++]));
    
    //printf("---ybs---------------\n");
    srandom(684168464);
    for (int i = 0; i < size; data[i++]=random());
    time_t ybs_start = clock();
    y_sort_by_swap(data,0,size);
    time_t ybs_final = clock();
    //for (int i = 0; i < size; printf("%d\n",data[i++]));


    printf("sort_by_swap.. на %d элементов потратил %lf секунды\n",size,(double)(sbs_final-sbs_start)/CLOCKS_PER_SEC);
    printf("x_sort_by_swap на %d элементов потратил %lf секунды\n",size,(double)(xbs_final-xbs_start)/CLOCKS_PER_SEC);
    printf("y_sort_by_swap на %d элементов потратил %lf секунды\n",size,(double)(ybs_final-ybs_start)/CLOCKS_PER_SEC);
    printf("qsort......... на %d элементов потратил %lf секунды\n",size,(double)(qst_final-qst_start)/CLOCKS_PER_SEC);

    return 0;
}
dron@gnu:~/Рабочий-стол/ыыы$ gcc main.c ; ./a.out 5000
sort_by_swap.. на 5000 элементов потратил 0.134655 секунды
x_sort_by_swap на 5000 элементов потратил 0.121517 секунды
y_sort_by_swap на 5000 элементов потратил 0.071896 секунды
qsort......... на 5000 элементов потратил 0.000741 секунды
dron@gnu:~/Рабочий-стол/ыыы$ 

Исходная версия LINUX-ORG-RU, :

Как то так. (вроде ничего не перепутал)

#include <stdlib.h>
#include <assert.h>
#include <stdio.h>
#include <time.h>
/*----------------------------------------------------*/
static int my_cmp(const void *left, const void *right) {
    return (*(int*)left > *(int*)right);
}
/*-----------------------------------------------------*/
void swap_local(int *left, int *right) {
    int temp = 0;
    temp = *right;
    *right = *left;
    *left = temp;
}

void sort_by_swap(int arrays[], int left, int right) {
    if (left >= right) {
        return;
    }
    for (int i = left; i <= right; ++i) {
        if (arrays[left] > arrays[i]) {
            swap_local(&arrays[left], &arrays[i]);
        }
    }
    sort_by_swap(arrays, ++left, right);
}
/*------------------------------------------------------*/
void x_sort_by_swap(int arrays[], int left, int right) {
    if (left >= right) {
        return;
    }
    for (int i = left; i <= right; ++i) {
        if (arrays[left] > arrays[i])
        {
            int swaps = arrays[i];
            arrays[i]=arrays[left];
            arrays[left]=swaps;
        }
    }
    x_sort_by_swap(arrays, ++left, right);
}
/*-----------------------------------------------------*/
void y_sort_by_swap(int arrays[], int left, int right) {
    if (left >= right) {
        return;
    }
    for (int x = left; x < right; x++)
    for (int i = x; i <= right; ++i) {
        if (arrays[left] > arrays[i])
        {
            int swaps = arrays[i];
            arrays[i]=arrays[left];
            arrays[left]=swaps;
        }
    }
}
/*-----------------------------------------------------*/

int main(int argc, char *argv[])
{
    int size = 500;
    if ( argc > 1 )
    {
        sscanf(argv[1],"%d",&size);
    }
    int * data = malloc(sizeof(int)*size+1);
    assert(data);

    srandom(684168464);
    
    //printf("---sbs----------------\n");
    for (int i = 0; i < size; data[i++]=random());
    time_t sbs_start = clock();
    sort_by_swap(data,0,size);
    time_t sbs_final = clock();
    //for (int i = 0; i < size; printf("%d\n",data[i++]));

    //printf("---qsort--------------\n");
    srandom(684168464);
    time_t qst_start = clock();
    for (int i = 0; i < size; data[i++]=random());
    qsort(data, size, sizeof(int), my_cmp);
    time_t qst_final = clock();
    //for (int i = 0; i < size; printf("%d\n",data[i++]));

    //printf("---xbs---------------\n");
    srandom(684168464);
    for (int i = 0; i < size; data[i++]=random());
    time_t xbs_start = clock();
    x_sort_by_swap(data,0,size);
    time_t xbs_final = clock();
    //for (int i = 0; i < size; printf("%d\n",data[i++]));
    
    //printf("---ybs---------------\n");
    srandom(684168464);
    for (int i = 0; i < size; data[i++]=random());
    time_t ybs_start = clock();
    y_sort_by_swap(data,0,size);
    time_t ybs_final = clock();
    //for (int i = 0; i < size; printf("%d\n",data[i++]));


    printf("sort_by_swap.. на %d элементов потратил %lf секунды\n",size,(double)(sbs_final-sbs_start)/CLOCKS_PER_SEC);
    printf("x_sort_by_swap на %d элементов потратил %lf секунды\n",size,(double)(xbs_final-xbs_start)/CLOCKS_PER_SEC);
    printf("y_sort_by_swap на %d элементов потратил %lf секунды\n",size,(double)(ybs_final-ybs_start)/CLOCKS_PER_SEC);
    printf("qsort......... на %d элементов потратил %lf секунды\n",size,(double)(qst_final-qst_start)/CLOCKS_PER_SEC);

    return 0;
}
dron@gnu:~/Рабочий-стол/ыыы$ gcc main.c ; ./a.out 5000
sort_by_swap.. на 5000 элементов потратил 0.134655 секунды
x_sort_by_swap на 5000 элементов потратил 0.121517 секунды
y_sort_by_swap на 5000 элементов потратил 0.071896 секунды
qsort......... на 5000 элементов потратил 0.000741 секунды
dron@gnu:~/Рабочий-стол/ыыы$