Chinaunix首页 | 论坛 | 博客
  • 博客访问: 107069
  • 博文数量: 24
  • 博客积分: 105
  • 博客等级: 民兵
  • 技术积分: 244
  • 用 户 组: 普通用户
  • 注册时间: 2012-02-09 20:05
文章分类

全部博文(24)

文章存档

2015年(1)

2014年(9)

2013年(10)

2012年(4)

我的朋友

分类: 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;
}

阅读(816) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~