Skip to content

Instantly share code, notes, and snippets.

@sekrasoft
Created May 1, 2016 12:33
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save sekrasoft/4ecadd433e967fb8023ee5a72e84e42c to your computer and use it in GitHub Desktop.
Save sekrasoft/4ecadd433e967fb8023ee5a72e84e42c to your computer and use it in GitHub Desktop.
#include <stdio.h>
#include <stdlib.h>
void swap(void* a, void* b, size_t size) {
char tmp;
for(size_t i = 0; i < size; ++i) {
tmp = ((char*)a)[i];
((char*)a)[i] = ((char*)b)[i];
((char*)b)[i] = tmp;
}
}
void random_sort (void* base, size_t num, size_t size, int (*compar)(const void*,const void*)) {
int sorted;
do {
for(int i=1; i<num; ++i)
if(rand() > RAND_MAX >> 1)
swap(base + size * (i - 1), base + size * i, size);
sorted = 1;
for(int i=1; i<num; ++i)
if(compar(base + size * (i - 1), base + size * i) < 0) {
sorted = 0;
break;
}
} while(!sorted);
}
int compare_float(const void* a, const void* b) {
if(*(const float*)a > *(const float*)b) return -1;
if(*(const float*)a < *(const float*)b) return +1;
return 0;
}
int main(void) {
float array[3] = {2.8, -4.5, 0.0};
random_sort(array, 3, sizeof(float), compare_float);
printf("%f %f %f", array[0], array[1], array[2]);
return 0;
}
@sekrasoft
Copy link
Author

Вывод программы:

-4.500000 0.000000 2.800000

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment