把数组排成最小的数

剑指offer这本书中程序实现若干是基于C版本的。

比如这道题目:把数组排成最小的数

使用qsort,其中qsort的参数如下

void qsort (void* base, size_t num, size_t size,
            int (*compar)(const void*,const void*));
一般来说,现在我都会用sort,然后我传了一个函数,定义也是

int compareNum(int num1,int num2)给sort

程序就挂了==

后来发现sort的compare参数是

bool compareNum(int num1,int num2)


用C++写的代码比c写的代码简短多了。

这道题目本身不难,主要是区别qsort和sort传递参数区别,返回Int,bool能导致程序报错。

assert失败。



const int MAXLEN=20;
char *arr1=new char[MAXLEN];
char *arr2=new char[MAXLEN];
bool compareNum(int num1,int num2)
{
	sprintf(arr1,"%d%d\0",num1,num2);
	sprintf(arr2,"%d%d\0",num2,num1);
	int len=strlen(arr1);
	return strcmp(arr1,arr2)>0;
}
struct myfuncCompare {
	bool operator() (int i,int j) { return compareNum(i,j);}
} myobject;


void print(vector<int> &num)
{
	sort(num.begin(),num.end(),compareNum);
	//sort(num.begin(),num.end(),myobject);
	for (int i=0;i<num.size();++i)
	{
		printf("%d",num[i]);
	}
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值