#include <stdio.h>
#include <string.h>
void bubble_sort(int arr[], int tamanho) {
int i, j;
for (i = 0; i < tamanho - 1; i++) {
for (j = 0; j < tamanho- i - 1; j++) {
if (arr[j] > arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
int comparador (void * a, void* b){
return ( *(int*)a - *(int*)b );
}
int comparador_nomes(void * a, void* b){
char **nome1 = (char**)a;
char **nome2 = (char**)b;
return strcmp(*nome1
, *nome2
); }
void bubble_sort_generico(void *arr, int tamanho, int bytes_elem, int comparador(void*, void*) ){
int i, j, tamanho_bytes = tamanho * bytes_elem;
for (i = 0; i < tamanho_bytes - bytes_elem; i += bytes_elem) {
for (j = 0; j < tamanho_bytes - i - bytes_elem; j += bytes_elem) {
void *ptr_elem1 = arr + j;
void *ptr_elem2 = arr + j + bytes_elem;
if (comparador(ptr_elem1, ptr_elem2) > 0){
char temp[1000];
memcpy(temp
, ptr_elem1
, bytes_elem
); memcpy(ptr_elem1
, ptr_elem2
, bytes_elem
); memcpy(ptr_elem2
, temp
, bytes_elem
); }
}
}
}
int main() {
int nums[] = {37,2,59,1,19,3,14};
int tamanho = sizeof(nums) / sizeof(nums[0]);
bubble_sort_generico(nums, tamanho, sizeof(int), comparador);
int i;
for (i = 0;i < tamanho;++i){
}
char *nomes[] = {"joao", "filipa", "rita", "ana", "marcos"};
int tamanho2 = sizeof(nomes) / sizeof(nomes[0]);
bubble_sort_generico(nomes, tamanho2, sizeof(char*) , comparador_nomes);
for (i = 0;i < tamanho2 ;++i){
}
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KCnZvaWQgYnViYmxlX3NvcnQoaW50IGFycltdLCBpbnQgdGFtYW5obykgewogICAgaW50IGksIGo7CiAgICBmb3IgKGkgPSAwOyBpIDwgdGFtYW5obyAtIDE7IGkrKykgewogICAgICAgIGZvciAoaiA9IDA7IGogPCB0YW1hbmhvLSBpIC0gMTsgaisrKSB7CiAgICAgICAgICAgIGlmIChhcnJbal0gPiBhcnJbaiArIDFdKSB7CiAgICAgICAgICAgICAgICBpbnQgdGVtcCA9ICBhcnJbal07CiAgICAgICAgICAgICAgICBhcnJbal0gPSBhcnJbaiArIDFdOwogICAgICAgICAgICAgICAgYXJyW2ogKyAxXSA9IHRlbXA7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9Cn0KCmludCBjb21wYXJhZG9yICh2b2lkICogYSwgdm9pZCogYil7CiAgICByZXR1cm4gKCAqKGludCopYSAtICooaW50KiliICk7Cn0KCmludCBjb21wYXJhZG9yX25vbWVzKHZvaWQgKiBhLCB2b2lkKiBiKXsKICAgIGNoYXIgKipub21lMSA9IChjaGFyKiopYTsKICAgIGNoYXIgKipub21lMiA9IChjaGFyKiopYjsKICAgIHJldHVybiBzdHJjbXAoKm5vbWUxLCAqbm9tZTIpOwp9Cgp2b2lkIGJ1YmJsZV9zb3J0X2dlbmVyaWNvKHZvaWQgKmFyciwgaW50IHRhbWFuaG8sIGludCBieXRlc19lbGVtLCBpbnQgY29tcGFyYWRvcih2b2lkKiwgdm9pZCopICl7CiAgICBpbnQgaSwgaiwgdGFtYW5ob19ieXRlcyA9IHRhbWFuaG8gKiBieXRlc19lbGVtOwogICAgZm9yIChpID0gMDsgaSA8IHRhbWFuaG9fYnl0ZXMgLSBieXRlc19lbGVtOyBpICs9IGJ5dGVzX2VsZW0pIHsKICAgICAgICBmb3IgKGogPSAwOyBqIDwgdGFtYW5ob19ieXRlcyAtIGkgLSBieXRlc19lbGVtOyBqICs9IGJ5dGVzX2VsZW0pIHsKICAgICAgICAgICAgdm9pZCAqcHRyX2VsZW0xID0gYXJyICsgajsKICAgICAgICAgICAgdm9pZCAqcHRyX2VsZW0yID0gYXJyICsgaiArIGJ5dGVzX2VsZW07CgogICAgICAgICAgICBpZiAoY29tcGFyYWRvcihwdHJfZWxlbTEsIHB0cl9lbGVtMikgPiAwKXsKICAgICAgICAgICAgICAgIGNoYXIgdGVtcFsxMDAwXTsKICAgICAgICAgICAgICAgIG1lbWNweSh0ZW1wLCBwdHJfZWxlbTEsIGJ5dGVzX2VsZW0pOwogICAgICAgICAgICAgICAgbWVtY3B5KHB0cl9lbGVtMSwgcHRyX2VsZW0yLCBieXRlc19lbGVtKTsKICAgICAgICAgICAgICAgIG1lbWNweShwdHJfZWxlbTIsIHRlbXAsIGJ5dGVzX2VsZW0pOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQp9CgoKaW50IG1haW4oKSB7CiAgICBpbnQgbnVtc1tdID0gezM3LDIsNTksMSwxOSwzLDE0fTsKICAgIGludCB0YW1hbmhvID0gc2l6ZW9mKG51bXMpIC8gc2l6ZW9mKG51bXNbMF0pOwogICAgYnViYmxlX3NvcnRfZ2VuZXJpY28obnVtcywgdGFtYW5obywgc2l6ZW9mKGludCksIGNvbXBhcmFkb3IpOwoKICAgIGludCBpOwogICAgZm9yIChpID0gMDtpIDwgdGFtYW5obzsrK2kpewogICAgICAgIHByaW50ZigiJWQgIiwgbnVtc1tpXSk7CiAgICB9CgogICAgcHJpbnRmKCJcblxuIik7CgogICAgY2hhciAqbm9tZXNbXSA9IHsiam9hbyIsICJmaWxpcGEiLCAicml0YSIsICJhbmEiLCAibWFyY29zIn07CiAgICBpbnQgdGFtYW5obzIgPSBzaXplb2Yobm9tZXMpIC8gc2l6ZW9mKG5vbWVzWzBdKTsKICAgIGJ1YmJsZV9zb3J0X2dlbmVyaWNvKG5vbWVzLCB0YW1hbmhvMiwgc2l6ZW9mKGNoYXIqKSAsIGNvbXBhcmFkb3Jfbm9tZXMpOwoKICAgIGZvciAoaSA9IDA7aSA8IHRhbWFuaG8yIDsrK2kpewogICAgICAgIHByaW50ZigiJXNcbiIsIG5vbWVzW2ldKTsKICAgIH0KCiAgICByZXR1cm4gMDsKfQo=