您的位置:首页 > 其它

C Tips: 排序算法:插入排序(Insert sorting)

2014-04-05 17:35 225 查看
代码如下:

void InsertSort(void** array, size_t count, int(*cmp)(const void *, const void *))
{
size_t i;
size_t j;
void *value;

if (array == NULL || count <= 1)
{
return;
}

for (j = 1; j < count; j++)
{
i = j - 1;
value = array[j];
while (i + 1 >= 1 && cmp(array[i], value) > 0)
{
array[i + 1] = array[i];
i--;
}

array[i + 1] = value;
}
}


或:

void InsertSort(void** array, int count, int(*cmp)(const void *, const void *))
{
int j;
int i;
void *value;

if (array == NULL || count <= 1)
{
return;
}

for (j = 1; j < count; j++)
{
value = array[j];

for (i = j - 1; i >= 0; i--)
{
if (cmp(array[i], value) <= 0)
{
break;
}

array[i + 1] = array[i];
}

array[i + 1] = value;
}
}


这里的输入参数 int(*cmp)(const void *, const void *) 是一个函数的指针,示例见《C Tips: 比较函数 int(*cmp)(const void *, const void *)

测试:

int _tmain(int argc, _TCHAR* argv[])
{
Item items[5];

items[0].HeadwareId = 0x0102; items[0].RangeId = 0x0304;
items[1].HeadwareId = 0x0506; items[1].RangeId = 0x0708;
items[2].HeadwareId = 0x0103; items[2].RangeId = 0x0102;
items[3].HeadwareId = 0x0708; items[3].RangeId = 0x0304;
items[4].HeadwareId = 0x0605; items[4].RangeId = 0x0404;

InsertSort((void**)items, 5, cmpItems);

return 0;
}


排序前:



排序后:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息