fork download
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. void bubble_sort(int arr[], int tamanho) {
  5. int i, j;
  6. for (i = 0; i < tamanho - 1; i++) {
  7. for (j = 0; j < tamanho- i - 1; j++) {
  8. if (arr[j] > arr[j + 1]) {
  9. int temp = arr[j];
  10. arr[j] = arr[j + 1];
  11. arr[j + 1] = temp;
  12. }
  13. }
  14. }
  15. }
  16.  
  17. int comparador (void * a, void* b){
  18. return ( *(int*)a - *(int*)b );
  19. }
  20.  
  21. int comparador_nomes(void * a, void* b){
  22. char **nome1 = (char**)a;
  23. char **nome2 = (char**)b;
  24. return strcmp(*nome1, *nome2);
  25. }
  26.  
  27. void bubble_sort_generico(void *arr, int tamanho, int bytes_elem, int comparador(void*, void*) ){
  28. int i, j, tamanho_bytes = tamanho * bytes_elem;
  29. for (i = 0; i < tamanho_bytes - bytes_elem; i += bytes_elem) {
  30. for (j = 0; j < tamanho_bytes - i - bytes_elem; j += bytes_elem) {
  31. void *ptr_elem1 = arr + j;
  32. void *ptr_elem2 = arr + j + bytes_elem;
  33.  
  34. if (comparador(ptr_elem1, ptr_elem2) > 0){
  35. char temp[1000];
  36. memcpy(temp, ptr_elem1, bytes_elem);
  37. memcpy(ptr_elem1, ptr_elem2, bytes_elem);
  38. memcpy(ptr_elem2, temp, bytes_elem);
  39. }
  40. }
  41. }
  42. }
  43.  
  44.  
  45. int main() {
  46. int nums[] = {37,2,59,1,19,3,14};
  47. int tamanho = sizeof(nums) / sizeof(nums[0]);
  48. bubble_sort_generico(nums, tamanho, sizeof(int), comparador);
  49.  
  50. int i;
  51. for (i = 0;i < tamanho;++i){
  52. printf("%d ", nums[i]);
  53. }
  54.  
  55. printf("\n\n");
  56.  
  57. char *nomes[] = {"joao", "filipa", "rita", "ana", "marcos"};
  58. int tamanho2 = sizeof(nomes) / sizeof(nomes[0]);
  59. bubble_sort_generico(nomes, tamanho2, sizeof(char*) , comparador_nomes);
  60.  
  61. for (i = 0;i < tamanho2 ;++i){
  62. printf("%s\n", nomes[i]);
  63. }
  64.  
  65. return 0;
  66. }
  67.  
Success #stdin #stdout 0s 4536KB
stdin
Standard input is empty
stdout
1 2 3 14 19 37 59 

ana
filipa
joao
marcos
rita