排序算法

1.插入排序

特点:算法较简单(类似扑克牌),但效率比较低,适合数据量较少(几千,几万),有序的数据。复杂度 O(n) O(n2) O(n2) 。

void sortInsert(int *dat, int size)
{
    int i, pos;
    
    for (i = 1; i < size; i++)
    {
        pos = i - 1;
        int value = dat[i];
        
        while (pos >= 0 && dat[pos] > value){
            pos--;
        }
        pos++;
        memmove(dat + pos + 1, dat + pos, (i - pos) * sizeof(int));
        dat[pos] = value;
    }
}

测试:排序 100W 整型数据,约需 15min(用 sort 命令只需 2s!)

void sortInsert2(int *dat, int size)
{
    int i, pos, value;
    
    for (i = 1; i < size; i++)
    {
        pos = i - 1;
        value = dat[i];
        
        while (pos >= 0 && dat[pos] > value){
            /* 相应元素后移一个位置 */
            dat[pos + 1] = dat[pos];
            pos--;
        }
        dat[pos + 1] = value;
    }
}

测试:排序 100W 整型数据,约需 30min!!

posted @ 2012-04-23 13:56  xiangzi888  阅读(373)  评论(0编辑  收藏  举报