优化冒泡(高质量):
#include <stdio.h> #include <stdlib.h> #include <string.h> int com_str(const void *elem1, const void *elem2) { return strcmp((char *)*(int *)elem1, (char *)*(int *)elem2); } void Swap(char *p1, char *p2, size_t sz) { size_t i = 0; for(i = 0; i<sz; i++) { char tmp = *(p1+i); *(p1+i) = *(p2+i); *(p2+i) = tmp; } } void bubble_sort(void *base, size_t num, size_t width, int (*cmp)(const void *elem1, const void *elem2)) { size_t i = 0; size_t j = 0; for(i = 0; i < num-1; i++) { for(j = 0; j < num-1-i; j++) { if(cmp((char *)base+ width*j, (char *)base+width*(j+1)) > 0) { Swap((char *)base+ width*j, (char *)base+width*(j+1), width); } } } } int main() { char *arr[] = {"bbbb","aaaa","dddd","cccc"}; int i = 0; bubble_sort(arr, sizeof(arr)/sizeof(arr[0]), sizeof(arr[0]), com_str); for (i = 0; i < sizeof(arr) / sizeof(arr[0]); i++) { printf("%s ", arr[i]); } printf("\n"); system("pause"); return 0; } |