История изменений
Исправление 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:~/Рабочий-стол/ыыы$