File: Stare vježbe/vjezbe14/xx__genericko_sortiranje.c

  1. /*
  2.   xx__genericko_sortiranje.c
  3.   -----
  4.   Implementacija genericke rutine za sortiranje polja raznih tipova
  5.   podataka.
  6.  
  7. */
  8.  
  9. #include <stdio.h>
  10. #include <string.h>
  11.  
  12. #define STR_LENGTH 20
  13.  
  14. void sort(void* p, size_t size, int n,
  15. int(*compare)(const void *, const void *)) {
  16. int i, j;
  17. char buffer[256];
  18. char* a = p;
  19.  
  20. for(i = 0; i < n-1; i++)
  21. for(j = i+1; j < n; j++)
  22. if(compare((void*)(a+i*size), (void*)(a+j*size)) > 0) {
  23. memcpy(buffer, a+i*size, size);
  24. memcpy(a+size*i, a+j*size, size);
  25. memcpy(a+j*size, buffer, size);
  26. }
  27. }
  28.  
  29. int cmp_int(const void *m, const void *n) {
  30. return *((int*)m) > *((int*)n);
  31. }
  32.  
  33. int cmp_string(const void *m, const void *n) {
  34. return strcmp((char*)m, (char*)n);
  35. }
  36.  
  37. int main() {
  38. int int_arr[]={3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5, 8, 9, 7, 9};
  39. char string_arr[][STR_LENGTH]={"Mrgud",
  40. "Hrga",
  41. "Trapavi",
  42. "Leni",
  43. "Strumfeta",
  44. "Gargamel",
  45. "Majstor",
  46. "Azriel"};
  47. int k;
  48. int int_size=sizeof(int_arr)/sizeof(int);
  49. int string_size=sizeof(string_arr)/STR_LENGTH;
  50.  
  51. printf("Polje intova prije sortiranja:\n");
  52. for(k = 0; k < int_size; k++)
  53. printf("%d ", int_arr[k]);
  54. printf("\n");
  55.  
  56. printf("\nPolje stringova prije sortiranja:\n");
  57. for(k = 0; k < string_size; k++)
  58. printf("%s ", string_arr[k]);
  59. printf("\n");
  60.  
  61. sort(int_arr, sizeof(int), int_size, cmp_int);
  62.  
  63. sort(string_arr, STR_LENGTH, string_size, cmp_string);
  64.  
  65. printf("\nPolje intova nakon sortiranja:\n");
  66. for(k = 0; k < int_size; k++)
  67. printf("%d ", int_arr[k]);
  68. printf("\n");
  69.  
  70. printf("\nPolje stringova nakon sortiranja:\n");
  71. for(k = 0; k < string_size; k++)
  72. printf("%s ", string_arr[k]);
  73. printf("\n");
  74.  
  75. return 0;
  76. }
  77.