#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int compare_int( void *a, void *b)
{
int *c = a;
int *d = b;
return *c - *d;
}
int compare_string( void *a, void *b)
{
char *c = a;
char *d = b;
}
int compare_string_v2( void *a, void *b)
{
char **c = a;
char **d = b;
}
void bubble_sort (void* base, size_t num, size_t width,int (*compar)( void*, void*))
{
int i,j,k;
unsigned char *ptr = base;
unsigned char tmp[256];
if(num < 2 || width == 0)
return;
for(i = num-1; i > 0; i--) /* 1*/
{
for(j = 1; j <= i; j++)
{
k = compar(ptr + width * (j-1), ptr + width * j);
if(k > 0)
{
memcpy(tmp
, ptr
+ width
*(j
-1), width
); memcpy(ptr
+ width
*(j
-1), ptr
+ width
*j
, width
); memcpy(ptr
+ width
* j
, tmp
, width
); }
}
}
}
int main(){
int a[] = {1, 3, 4, 52, 2, 3};
char a2[5][20] = { "jhsa", "asndb", "drtfe", "nhurh", "bvhr"};
char *a3[] = { "jhsa", "asndb", "drtfe", "nhurh", "bvhr"};
int i = 0;
bubble_sort (a, 6, sizeof(int), compare_int);
for(i = 0; i < 6; i++){
}
bubble_sort (a2, 5, 20, compare_string);
for(i = 0; i < 5; i++){
}
printf("\n\nsort array of strings:\n\n"); bubble_sort (a3, 5, sizeof(char*), compare_string_v2);
for(i = 0; i < 5; i++){
}
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHN0cmluZy5oPgoKaW50IGNvbXBhcmVfaW50KCB2b2lkICphLCAgdm9pZCAqYikKewoJaW50ICpjID0gYTsKCWludCAqZCA9IGI7CglyZXR1cm4gKmMgLSAqZDsKfQoKaW50IGNvbXBhcmVfc3RyaW5nKCB2b2lkICphLCAgdm9pZCAqYikKewoJIGNoYXIgKmMgPSBhOwoJIGNoYXIgKmQgPSBiOwoJcmV0dXJuIHN0cmNtcChjLCBkKTsKfQoKaW50IGNvbXBhcmVfc3RyaW5nX3YyKCB2b2lkICphLCAgdm9pZCAqYikKewoJIGNoYXIgKipjID0gYTsKCSBjaGFyICoqZCA9IGI7CglyZXR1cm4gc3RyY21wKCpjLCAqZCk7Cn0KCnZvaWQgYnViYmxlX3NvcnQgKHZvaWQqIGJhc2UsIHNpemVfdCBudW0sIHNpemVfdCB3aWR0aCxpbnQgKCpjb21wYXIpKCB2b2lkKiwgdm9pZCopKQp7CglpbnQgaSxqLGs7Cgl1bnNpZ25lZCBjaGFyICpwdHIgPSBiYXNlOwoJdW5zaWduZWQgY2hhciB0bXBbMjU2XTsKCglpZihudW0gPCAyIHx8IHdpZHRoID09IDApCgkJcmV0dXJuOwoKCWZvcihpID0gbnVtLTE7IGkgPiAwOyBpLS0pIC8qIDEqLwoJewoJCWZvcihqID0gMTsgaiA8PSBpOyBqKyspCgkJewogIAkJICAgIGsgPSBjb21wYXIocHRyICsgd2lkdGggKiAoai0xKSwgcHRyICsgd2lkdGggKiBqKTsKCQkJaWYoayA+IDApCgkJCXsKCQkJCW1lbWNweSh0bXAsIHB0ciArIHdpZHRoKihqLTEpLCB3aWR0aCk7CgkJCQltZW1jcHkocHRyICsgd2lkdGgqKGotMSksIHB0ciArIHdpZHRoKmosIHdpZHRoKTsKCQkJCW1lbWNweShwdHIgKyB3aWR0aCAqIGosIHRtcCwgd2lkdGgpOwoJCQl9CgkJfQoJfQp9CgppbnQgbWFpbigpewogICAgIGludCBhW10gPSB7MSwgMywgNCwgNTIsIDIsIDN9OwogICAgIGNoYXIgYTJbNV1bMjBdID0geyAiamhzYSIsICJhc25kYiIsICJkcnRmZSIsICJuaHVyaCIsICJidmhyIn07CiAgICAgY2hhciAqYTNbXSA9IHsgImpoc2EiLCAiYXNuZGIiLCAiZHJ0ZmUiLCAibmh1cmgiLCAiYnZociJ9OyAKICAgICBpbnQgaSA9IDA7CiAgICAgYnViYmxlX3NvcnQgKGEsIDYsIHNpemVvZihpbnQpLCBjb21wYXJlX2ludCk7ICAgIAogICAgIGZvcihpID0gMDsgaSA8IDY7IGkrKyl7CiAgICAgICAgcHJpbnRmKCJcbiVkIiwgYVtpXSk7CiAgICAgfQogICAgIGJ1YmJsZV9zb3J0IChhMiwgNSwgMjAsIGNvbXBhcmVfc3RyaW5nKTsgICAgCiAgICAgZm9yKGkgPSAwOyBpIDwgNTsgaSsrKXsKICAgICAgICBwcmludGYoIlxuJXMiLCBhMltpXSk7CiAgICAgfQogICAgIHByaW50ZigiXG5cbnNvcnQgYXJyYXkgb2Ygc3RyaW5nczpcblxuIik7CiAgICAgYnViYmxlX3NvcnQgKGEzLCA1LCBzaXplb2YoY2hhciopLCBjb21wYXJlX3N0cmluZ192Mik7ICAgIAogICAgIGZvcihpID0gMDsgaSA8IDU7IGkrKyl7CiAgICAgICAgcHJpbnRmKCIlc1xuIiwgYTNbaV0pOwogICAgIH0KICAgICAgCiAgICAgcmV0dXJuIDA7IAp9