今天学堆排序了,好长,没学完,所以充数一下,把第一天写的插入排序,写了一个通用版本,这个版本抽象成排序类型、类型大小比较、移动类型三种操作。从而理论上可以对任何数组进行排序(我考虑可以对结构体、字符串等,需要抽象成指针),权当练习吧。
typedef int (*COMPARE_KEYS)(const SORT_TYPE key1, const SORT_TYPE key2); typedef void (*MOVE_KEY)(SORT_TYPE * dstKey, SORT_TYPE srcKey); int insertion_sort_common(SORT_TYPE * arr, unsigned int arrLength, COMPARE_KEYS pCompareKeysFunc, MOVE_KEY pMoveKeyFunc) { SORT_TYPE key; unsigned int keyPos = 0; unsigned int comparePos = 0; if(arr == NULL) { return -1; } for(keyPos = 1; keyPos < arrLength; ++keyPos) { pMoveKeyFunc(&key, arr[keyPos]); for(comparePos = keyPos - 1; comparePos >= 0; --comparePos) { if(pCompareKeysFunc(key, arr[comparePos]) < 0) { pMoveKeyFunc(&arr[comparePos + 1], arr[comparePos]); if(comparePos == 0) { pMoveKeyFunc(&arr[comparePos], key); break; } } else { pMoveKeyFunc(&arr[comparePos + 1], key); break; } } } return 0; }