#include <stdio.h>
int cmp_intup(void*b,void*a)
{
return(int)*(int*)a-*(int*)b;
}
int cmp_intdown(void*a,void*b)
{
return(int)*(int*)a-*(int*)b;
}
// 这里只是排序,这几个参数分别是 开始排序的位置,排几个,每一个元素占几个字节,升序函数还是降序函数
unsigned int Bubble_sort(\
void*a,\
const int num,\
const int sz,int(*cmp)(void*,void*))// \ 太长了,换多行显示
{
int flag = 0;
unsigned int swap_count = 0;
for(int i = 0;i<num-1;i++)
{
flag = 0;
for(int j = 0;j<num-1-i;j++)
{
if(cmp(a+j*sz,a+(j+1)*sz)<0)
{
char*ptra = (char*)(a+j*sz);
char*ptrb = (char*)(a+(j+1)*sz);
for(int k = 0;k<sz;k++)
{
ptra[k] = (ptra[k])^(ptrb[k]);
ptrb[k] = (ptra[k])^(ptrb[k]);
ptra[k] = (ptra[k])^(ptrb[k]);
flag = 1;
swap_count++;
}
}
}
if(!flag)
{
break;
}
}
return swap_count;
}
int main()
{
int n,arr[100],i = 0,j = 0;
int count = 0;
scanf("%d",&n);
// 录入n个数据
for(i = 0;i<n;i++)
scanf("%d",&arr[i]);
// 冒泡排序升序
Bubble_sort(arr,n,sizeof(arr[0]),cmp_intup);
while(count<n)
{
//-5 -3 -1 0 1 2 3
// 0 1 2 3 4 5 6
// 找出大于零的数的下标
if(arr[count]>0)
break;
count++;
}
// 冒泡排序,降序
// 从大于零的位置到达结尾 倒过来,再排一遍
Bubble_sort(arr+count,n-count,sizeof(arr[0]),cmp_intdown);
// 最后输出打印
for(j = 0;j<n;j++)
printf("%d ",arr[j]);
return 0;
}
请帮我测试一下,这段代码能否在您的机器上运行, 如果代码有错误,请指出
这段代码好像在电脑上,尤其是VS环境报错void* 未知大小