Skip to content

Instantly share code, notes, and snippets.

@iwinux
Created October 22, 2011 14:05
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save iwinux/1306037 to your computer and use it in GitHub Desktop.
Save iwinux/1306037 to your computer and use it in GitHub Desktop.
通用版的插入排序
/* 指针运算很费脑子 TAT */
void swap(char *s1, char *s2, size_t size) {
int i;
char tmp;
for (i = 0; i < size; i++, s1++, s2++) {
tmp = *s1;
*s1 = *s2;
*s2 = tmp;
}
}
void isort(void *base, size_t nmemb, size_t size,
int (*compare ) (const void *, const void * )) {
int i = 1;
char *array, *initial, *sorted, *tmp;
initial = (char *)base;
array = initial + size;
for (i = 1; i < nmemb; i++, array += size) {
for (sorted = initial; sorted < array; sorted += size) {
if (compare(sorted, array) > 0) {
for (tmp = array; tmp > sorted; tmp -= size) {
swap(tmp, tmp - size, size);
}
break;
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment