分类: C/C++
2013-05-14 13:37:11
最近在搞一个技术测评,要上机编程,虽然只是数据结构方面的,写一些算法练习一下编码的一次成功性。
插入排序原理:
1、把待排序数组的前面i个数想象成为已经有序的数组b
2、第i+1个数,在数组b中找到自己的位置即可
时间复杂度:在基本有序的情况下为n,逆序的情况下为n^2
c语言排序算法似乎无法让数据结构隔离变化,如果谁看到有高见,请指出来。我在此抛砖引玉
定义一个比较函数,用于隔离顺序的变化
typedef int (*cmp_func)(void *, void *);
int module_insert_sort(int * a, int len, cmp_func comp)
{
int sentry; //定义一个哨兵
int i, j;
//我写工具函数的时候总是很纠结,参数的合法性是不是应该有工具函数自己检查
if (NULL == a)
return 0;
//一个数据不需要排序
for (i = 1; i < len; i ++) {
sentry = a[i];
if (comp(&sentry, &a[i - 1]) < 0) {
j = i - 1;
do {
a[j + 1] = a[j];
if (comp(&sentry, &a[j - 1]) < 0)
break;
j --;
}while (j >= 0);
if (j < 0)
a[0] = sentry;
else
a[j] = sentry;
}
}
return 1;
}