兩種比較簡單的排序算法,固然複雜度都是n suqaired。 算法
具體實現以下: app
void *bubbleSort(void *base, size_t nmeb, size_t size, int(*compar)(const void *, const void *)) { int i, j, swapped; for (i = 0; i < nmeb - 1 && swapped; i++) { swapped = 0; for (j = 0; j < nmeb - 1; j++) { if (compar(base + j, base + j + 1) > 0) { swap(base + j, base + j + 1, size); swapped = 1; } } } } void selectionSort(void *base, size_t nmeb, size_t size, int(*compar)(const void *, const void *)) { int i, j, min; for (i = 0; i < nmeb; i++) { min = i; for (j = i + 1; j < nmeb; j++) { if (compar(base + i * size, base + j * size) < 0) { min = j; } } if (i != min) swap(base + i * size, base + min * size, size); } }
void swap(void *p1, void *p2, size_t size) { void *temp; temp = malloc(size); if (temp == NULL) { exit(EXIT_FAILURE); } memcpy(temp, p1, size); memcpy(p1, p2, size); memcpy(p2, temp, size); free(temp); } int comparStr(const void *p1, const void *p2) { return strcmp(* (char * const *) p1, * (char * const *) p2); } int comparInt(const void *p1, const void *p2) { return (*(const int *) p1 - *(const int *) p2); }