aaaaaa123456789 icon

Bubblesort

aaaaaa123456789 | PRO | 04/14/14 08:08:06 AM UTC | 0 ⭐ | 499 👁️ | Never ⏰ | []
C |

980 B

|

None

|

0 👍

/

0 👎

void bubblesort (void * array, unsigned item_count, unsigned item_size, int (* comparison) (void *, void *)) {
  // This algorithm is for benchmarking only, not for production use. Bubbles are slow at sorting!
  if (!(array && item_size && item_count && comparison)) return; // no point in sorting invalid or empty stuff
  if (item_count == 1) return; // or sorting just one value
  char * buf = malloc(item_size); // for temporary stuff
  char * array_ptr = array;
  unsigned pass, item;
  for (pass = item_count - 1; pass; pass --)
    for (item = 0; item < pass; item ++)
      if (comparison(array_ptr + item_size * item, array_ptr + item_size * (item + 1)) > 0) {
        // swap the items if they are inverted
        memcpy(buf, array_ptr + item_size * item, item_size);
        memcpy(array_ptr + item_size * item, array_ptr + item_size * (item + 1), item_size);
        memcpy(array_ptr + item_size * (item + 1), buf, item_size);
     }
  // array is now sorted
  free(buf);
}

Comments