#include <stdio.h>
#include <stddef.h>
#include <stdlib.h>
#include <malloc.h>
#include <string.h>
int cmp_int(void *a)
{
return ( ((int *)a)[0] > ((int *)a)[1] );
}
int cmp_float(void *a)
{
return ( ((float *)a)[0] > ((float *)a)[1] );
}
void bubble(void *arr, size_t elSize, size_t arSize, int(*cmp)(void *))
{
char swapped;
void *i = arr;
void *yoba = ((char *)arr) + arSize - elSize; // vot tak
void *tmp = alloca(elSize);
//printf("\n\n----\narSize: %i \n----\n\n", arSize/elSize);
do
{
swapped = 0;
for (i = arr; i != yoba ; i = ((char *)i) + elSize )
{
if( cmp( i ))
{
memcpy(tmp
, i
, elSize
); // kopiruem vo vremennuiu pamyat memcpy(i
, ((char *)i
) + elSize
, elSize
); // sledujushee v predidushee memcpy( ((char *)i
) + elSize
, tmp
, elSize
); // iz vremennoy v sledujushee swapped = 1;
}
}
} while (swapped != 0);
}
int main(int argc, char *argv[])
{
int a[] = {9, 8, 5, -4, 5, 1, -3, 0};
float b[] = {0.16, -2745, 666.6666666, 14.88, 133.7, 267.234, 123.123, 0};
int i;
for(i = 0; i < 8; i++)
{
}
bubble((void*)a, sizeof(int), sizeof(a), cmp_int);
for(i = 0; i < 8; i++)
{
}
printf("\n-*-*-*-*-*-*-*-\n"); /////////////////////////////////////////////////////////////////////////////////////
for(i = 0; i < 8; i++)
{
}
bubble((void*)b, sizeof(float), sizeof(b), cmp_float);
for(i = 0; i < 8; i++)
{
}
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRkZWYuaD4KI2luY2x1ZGUgPHN0ZGxpYi5oPgojaW5jbHVkZSA8bWFsbG9jLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KCmludCBjbXBfaW50KHZvaWQgKmEpCnsKICAgIHJldHVybiAoICgoaW50ICopYSlbMF0gPiAoKGludCAqKWEpWzFdICk7Cn0KCmludCBjbXBfZmxvYXQodm9pZCAqYSkKewogICAgcmV0dXJuICggKChmbG9hdCAqKWEpWzBdID4gKChmbG9hdCAqKWEpWzFdICk7Cn0KCgoKCnZvaWQgYnViYmxlKHZvaWQgKmFyciwgc2l6ZV90IGVsU2l6ZSwgc2l6ZV90IGFyU2l6ZSwgaW50KCpjbXApKHZvaWQgKikpCnsKICAgIGNoYXIgc3dhcHBlZDsKICAgIHZvaWQgKmkgPSBhcnI7CiAgICB2b2lkICp5b2JhID0gKChjaGFyICopYXJyKSArIGFyU2l6ZSAtIGVsU2l6ZTsgLy8gdm90IHRhawogICAgdm9pZCAqdG1wID0gYWxsb2NhKGVsU2l6ZSk7CiAgICAvL3ByaW50ZigiXG5cbi0tLS1cbmFyU2l6ZTogJWkgXG4tLS0tXG5cbiIsIGFyU2l6ZS9lbFNpemUpOwogICAgZG8KICAgIHsKICAgICAgICBzd2FwcGVkID0gMDsKICAgICAgICBmb3IgKGkgPSBhcnI7IGkgIT0geW9iYSA7IGkgPSAoKGNoYXIgKilpKSArIGVsU2l6ZSApCiAgICAgICAgewogICAgICAgICAgICBpZiggY21wKCBpICkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIG1lbWNweSh0bXAgICAgICAgICAgICAgICAgICAsIGkgICAgICAgICAgICAgICAgICAgLCBlbFNpemUpOyAvLyBrb3BpcnVlbSB2byB2cmVtZW5udWl1IHBhbXlhdAogICAgICAgICAgICAgICAgbWVtY3B5KGkgICAgICAgICAgICAgICAgICAgICwgKChjaGFyICopaSkgKyBlbFNpemUsIGVsU2l6ZSk7IC8vIHNsZWR1anVzaGVlIHYgcHJlZGlkdXNoZWUKICAgICAgICAgICAgICAgIG1lbWNweSggKChjaGFyICopaSkgKyBlbFNpemUsIHRtcCAgICAgICAgICAgICAgICAgLCBlbFNpemUpOyAvLyBpeiB2cmVtZW5ub3kgdiBzbGVkdWp1c2hlZQogICAgICAgICAgICAgICAgc3dhcHBlZCA9IDE7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgCiAgICB9IHdoaWxlIChzd2FwcGVkICE9IDApOwp9CgppbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQp7CiAgICBpbnQgICBhW10gPSB7OSwgOCwgNSwgLTQsIDUsIDEsIC0zLCAwfTsKICAgIGZsb2F0IGJbXSA9IHswLjE2LCAtMjc0NSwgNjY2LjY2NjY2NjYsIDE0Ljg4LCAxMzMuNywgMjY3LjIzNCwgMTIzLjEyMywgMH07CiAgICBpbnQgaTsKCmZvcihpID0gMDsgaSA8IDg7IGkrKykKICAgIHsKICAgICAgICBwcmludGYoIiVpLCAiLCBhW2ldKTsKICAgIH0KICAgIHByaW50ZigiXG4iKTsKICAgIAogICAgYnViYmxlKCh2b2lkKilhLCBzaXplb2YoaW50KSwgc2l6ZW9mKGEpLCBjbXBfaW50KTsKCiAgICBmb3IoaSA9IDA7IGkgPCA4OyBpKyspCiAgICB7CiAgICAgICAgcHJpbnRmKCIlaSwgIiwgYVtpXSk7CiAgICB9CiAgICBwcmludGYoIlxuLSotKi0qLSotKi0qLSotXG4iKTsKLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwoKICAgIGZvcihpID0gMDsgaSA8IDg7IGkrKykKICAgIHsKICAgICAgICBwcmludGYoIiVmLCAiLCBiW2ldKTsKICAgIH0KICAgIHByaW50ZigiXG4iKTsKICAgIAogICAgYnViYmxlKCh2b2lkKiliLCBzaXplb2YoZmxvYXQpLCBzaXplb2YoYiksIGNtcF9mbG9hdCk7CgogICAgZm9yKGkgPSAwOyBpIDwgODsgaSsrKQogICAgewogICAgICAgIHByaW50ZigiJWYsICIsIGJbaV0pOwogICAgfQoKCiAgICAKICAgIHJldHVybiAwOwp9
9, 8, 5, -4, 5, 1, -3, 0,
-4, -3, 0, 1, 5, 5, 8, 9,
-*-*-*-*-*-*-*-
0.160000, -2745.000000, 666.666687, 14.880000, 133.699997, 267.234009, 123.123001, 0.000000,
-2745.000000, 0.000000, 0.160000, 14.880000, 123.123001, 133.699997, 267.234009, 666.666687,