qsort()函数无法对含有-2147483648元素的整型数组进行排序

        最近做题刷到lLeetCode的350题:求两个数组的交集II。我先用qsort()函数对两个数组进行升序排序,然后再对两个数组进行比较,求出交集,代码如下:

int cmp(void const *a,void const *b)
{
    return *(int *)a -*(int *)b;
}

int* intersect(int* nums1, int nums1Size, int* nums2, int nums2Size, int* returnSize) 
{
     if(nums1Size==0||nums2Size==0)
        return NULL;
    qsort(nums1,nums1Size,sizeof(nums1[0]),cmp);
    qsort(nums2,nums2Size,sizeof(nums2[0]),cmp);
    
    int i = 0 , j = 0 ;	
    int *newnum = (int *)malloc((nums1Size+nums2Size)*sizeof(int));
    *returnSize = 0;

    while(i < nums1Size && j < nums2Size)
	{
		if(nums1[i] > nums2[j])
			j++;
		else if(nums1[i] < nums2[j])
			i++;
		else 
		{
			newnum[(*returnSize)++] = nums1[i];
			i++;j++;
		}
	}
    return newnum;
}

         提交解答,出现下面结果:

         看到这种情况,我的第一反应是这个测试用例有问题:-2147483648是不是超过整型范围了。查了一下,刚刚没超过范围,是整型的最小值(16位机 整型最小值-32678)。测试用例没问题,那只能是我程序的逻辑问题了,试着把测试用例代入程序中,逐条代码在纸上演算,没啥逻辑错误。其实这题也没啥逻辑的,可就是提交不成功,编程有时就是这样莫名其妙,无理取闹。排除了其它可能, 我不得不开始怀疑函数库自带的qsort()函数了,编了一段小程序看看它到底给我排成什么样了。

int main()
{	
	int a[4] = {-2147483648,1,2,3},i;
	int b[3] = {1,-2147483648,-2147483648};

	qsort(a,4,sizeof(int),cmp); 
	for(i=0;i<4;i++) 
		printf("%d ",a[i]);
	printf("\n");

	qsort(b,3,sizeof(int),cmp);  
	for(i=0;i<3;i++)
		printf("%d ",b[i]);
	getchar();
	return 0;
}

        运行结果:

         看到运行结果我很高兴,终于找到病根了,用冒泡排序代替qsort()快速排序后,顺利提交成功了。至于为什么qsort()无法对-2147483648进行排序,这我就不得而知了。但我想,肯定是由于这个数太小了,将这个数改为-2147483647后,结果仍然一样。但改为-2147483646后,一切就恢复正常了。

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值