排序算法的C语言实现(上 比较类排序:插入排序(7)

/*追加下一个有序元素到合并集中*/
        if(compare(&a[ipos * esize],*a[jpos *esize])<0)
        {
            memcpy(&m[mpos * esize],&a[ipos * esize],esize);
            ipos++;
            mpos++;
        }
        else
        {
            memccpy(&m[mpos * esize],&a[jpos * esize],esize);
            jpos++;
            mpos++;
        }
    }
    /*将已经排序的数据集拷贝到原数组中*/
    memcpy(&a[i * esize],m,esize * ((k-i)+1));

/*释放为排序分配的存储空间*/
    free(m);
    return 0;
}

/*mgsort 归并排序(递归调用)*/
int mgsort(void *data, int size, int esize, int i, int k, int(*compare)(const void *key1,const void *key2))
{
    int j;

/*递归调用mgsort持续分割,直到没有可以再分割的数据集*/
    if(i < k)
    {
        /*计算对半分割的位置下标*/
        j = (int)(((i+k-1)) / 2);

/*递归排序两边的集合*/
    if(mgsort(data, size, esize, i, j, compare) < 0)
        return -1;
    if(mgsort(data, size, esize, j+1, k, compare) <0)
        return -1;

/*将两个有序数据集合并成一个有序数据集*/
    if(meger(data, esize, i, j, k compare) < 0)
        return -1;
    }
return 0;
}

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/4c44cb3108d7558c7fdff59fb643a7ba.html