fork download
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. int compare_int( void *a, void *b)
  6. {
  7. int *c = a;
  8. int *d = b;
  9. return *c - *d;
  10. }
  11.  
  12. int compare_string( void *a, void *b)
  13. {
  14. char *c = a;
  15. char *d = b;
  16. return strcmp(c, d);
  17. }
  18.  
  19. int compare_string_v2( void *a, void *b)
  20. {
  21. char **c = a;
  22. char **d = b;
  23. return strcmp(*c, *d);
  24. }
  25.  
  26. void bubble_sort (void* base, size_t num, size_t width,int (*compar)( void*, void*))
  27. {
  28. int i,j,k;
  29. unsigned char *ptr = base;
  30. unsigned char tmp[256];
  31.  
  32. if(num < 2 || width == 0)
  33. return;
  34.  
  35. for(i = num-1; i > 0; i--) /* 1*/
  36. {
  37. for(j = 1; j <= i; j++)
  38. {
  39. k = compar(ptr + width * (j-1), ptr + width * j);
  40. if(k > 0)
  41. {
  42. memcpy(tmp, ptr + width*(j-1), width);
  43. memcpy(ptr + width*(j-1), ptr + width*j, width);
  44. memcpy(ptr + width * j, tmp, width);
  45. }
  46. }
  47. }
  48. }
  49.  
  50. int main(){
  51. int a[] = {1, 3, 4, 52, 2, 3};
  52. char a2[5][20] = { "jhsa", "asndb", "drtfe", "nhurh", "bvhr"};
  53. char *a3[] = { "jhsa", "asndb", "drtfe", "nhurh", "bvhr"};
  54. int i = 0;
  55. bubble_sort (a, 6, sizeof(int), compare_int);
  56. for(i = 0; i < 6; i++){
  57. printf("\n%d", a[i]);
  58. }
  59. bubble_sort (a2, 5, 20, compare_string);
  60. for(i = 0; i < 5; i++){
  61. printf("\n%s", a2[i]);
  62. }
  63. printf("\n\nsort array of strings:\n\n");
  64. bubble_sort (a3, 5, sizeof(char*), compare_string_v2);
  65. for(i = 0; i < 5; i++){
  66. printf("%s\n", a3[i]);
  67. }
  68.  
  69. return 0;
  70. }
Success #stdin #stdout 0s 2248KB
stdin
Standard input is empty
stdout
1
2
3
3
4
52
asndb
bvhr
drtfe
jhsa
nhurh

sort array of strings:

asndb
bvhr
drtfe
jhsa
nhurh