C Tips: 排序算法:插入排序(Insert sorting)
2014-04-05 17:35
225 查看
代码如下:
或:
这里的输入参数 int(*cmp)(const void *, const void *) 是一个函数的指针,示例见《C Tips: 比较函数 int(*cmp)(const void *, const void *)》
测试:
排序前:
排序后:
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; }
排序前:
排序后:
相关文章推荐
- 【图解算法】排序算法——插入排序
- 排序算法(1)——插入排序
- 排序算法之插入排序
- 排序算法之插入排序
- Java实现的各种排序算法(插入排序、选择排序算法、冒泡排序算法)
- 排序算法之(3)——插入排序
- 三种数组排序算法(冒泡排序、选择排序、插入排序、二分查找法)
- 排序算法——插入排序
- 【排序算法】排序算法之插入排序
- 用Python实现基本排序算法03——插入排序
- 排序算法:插入排序
- 排序算法(四) 插入排序
- 常用排序算法(1)-插入排序
- 排序算法之插入排序
- 排序算法系列三(插入排序)
- 排序算法之插入排序
- 算法分析中最常用的几种排序算法(插入排序、希尔排序、冒泡排序、选择排序、快速排序,归并排序)C 语言版
- 排序算法-shell排序-改良的插入排序
- 排序算法1之插入排序
- 几种排序算法(冒泡排序算法,选择排序算法,快速排序算法,插入排序)