今天学堆排序了,好长,没学完,所以充数一下,把第一天写的插入排序,写了一个通用版本,这个版本抽象成排序类型、类型大小比较、移动类型三种操作。从而理论上可以对任何数组进行排序(我考虑可以对结构体、字符串等,需要抽象成指针),权当练习吧。
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;
}
本文介绍了一种通用的插入排序算法实现,该算法通过抽象出排序类型、类型大小比较及移动类型的三种操作,使得其能够应用于多种数据结构如结构体、字符串等的排序中。
2950

被折叠的 条评论
为什么被折叠?



