题目:编写一个函数,它用于对一个任何类型的数组进行排序。

算法核心代码sort函数实现

C和指针第13章第4题
/**
功能说明:sort函数可以对不同类型的数据进行排序
参数:
1、一个指向需要排序的数组的第一个值的指针。
2、数组中元素的个数。 
3、每个数组元素的长度。
4、一个指向比较回调函数的指针 
**/
void sort(void *array,int size,int element_size,int (*cmp)(void const *a,void const *b))
{
    char *pc = (char *)array;//默认void *大小未知,这里把它存入字符指针下
     //简单的冒泡排序 这里可以用更高级的算法实现,这里采用了简单的冒泡排序
     for(int i = 0; i < size; i++)
     for(int j = 1; j < size-i; j++)
     {
             if(cmp(pc+(j-1)*element_size,pc+j*element_size) < 0)
             {
                 void *p = malloc(element_size);//分配一个string大小的内存
                 //交换两个元素,借助于和中间变量p,由于具体类型未知,这里借助于内存cpy函数拷贝内存内的内容
                 memcpy(p,pc+j*element_size,element_size);
                 memcpy(pc+j*element_size,pc+(j-1)*element_size,element_size);
                 memcpy(pc+(j-1)*element_size,p,element_size);
                 free(p);//临时变量使用完毕后,记得释放,不然容易造成内存泄露
             }
     }
}
C和指针第13章第4题

字符串比较函数,这里是第二个大于第一个返回值大于0,相等等于0,第二个数小于第一个返回值小于0

C和指针第13章第4题
//string 比较
int string_cmp(void const *a,void const *b)
{
    char *num1 = (char *)a;
    char *num2 = (char *)b;
    assert(num1 != NULL && num2 != NULL);
    while(*num1 != '\0' && *num2 != '\0')
    {        
        if(*num1 == *num2)
        {
            num1++;
            num2++;
            continue;
        }
        break;
    }
    return *num2-*num1;

}
C和指针第13章第4题

测试代码,全部代码

C和指针第13章第4题 View Code

 运行结果:

C和指针第13章第4题










本文转自NewPanderKing51CTO博客,原文链接:http://www.cnblogs.com/newpanderking/p/3834285.html ,如需转载请自行联系原作者


相关文章:

  • 2021-06-30
  • 2021-08-13
  • 2021-12-27
  • 2021-07-29
  • 2021-10-24
  • 2021-08-08
  • 2021-08-04
  • 2021-10-06
猜你喜欢
  • 2021-10-25
  • 2021-06-04
  • 2021-08-29
  • 2021-06-06
  • 2021-05-31
  • 2021-07-14
相关资源
相似解决方案