基于visual Studio2013解决算法导论之001插入排序

/*算法导论之001插入排序
  插入排序就是每一步都将一个待排数据按其大小插入到已经排序的数据中的适当位置,直到全部插入完毕。
*/

#include<stdio.h>
#include<time.h>
#include<stdlib.h>


void InsertSort(int *pnArr, int nLen)/*插入排序*/
{
	if (pnArr == NULL || nLen == 0)/*判断是否为空*/
	{
		return;
	}
	for (int i = 1; i < nLen; i++)
	{
		int nTmp = pnArr[i];	/*从第二个数据开始*/
		int j;					/*记录到第几个数了*/
		for (j = i; j>0 && nTmp<pnArr[j - 1]; j--) /*进来一个数,插入到已经排序的数据中*/
		{
			pnArr[j] = pnArr[j - 1];
		}
		pnArr[j] = nTmp;
	}
}
void PrintArr(int *pnArr, int nLen)/*输出函数*/
{
	for (int i = 0; i < nLen; i++)
	{
		printf("%5d", pnArr[i]);
	}
	printf("\n");
}
int main()
{
//	srand(time(NULL));
	int nArr[10] = {1,2,3,45,7,2,3,9,0,6};
	for (int i = 0; i < 10; i++)
	{
		/*nArr[i] = rand() % 100;//*/
	}
	printf("排序前:");
	PrintArr(nArr, 10);

	InsertSort(nArr, 10);
	printf("排序后:");
	PrintArr(nArr, 10);
	system("pause");
	return 0;
}

srand()函数:

void srand(unsigned seed) 初始化随机数发生器

有讨论如下:

   C的函数库之所以没有把使用系统时钟初始化随机种子这步重要的操作直接放进rand函数的实现中,
至少有三个原因:

(1)可以高效产生连续的随机数,不用每次都初始化;

(2)给程序员以更高的灵活性,因为可能在要求较高的场合,应该使用更好的的数据做种子,而不是系统时钟;

(3)对于只是想产生大量伪随机数来尽兴某种验证或者统计,未必需要初始化,大不了程序每次运行都产生同
样的一系列随机数而已——有些情况下,这是无所谓的。
事实上有一个更重要的原因:

    作为伪随机序列产生器的rand()函数,必须具备的一个重要特性就是-》产生的序列必须是可重现的。

这不仅仅是一个算法,相当大的程度上,它关系到代码测试的准确性。如果算法中使用了和rand()的结果
相关的数据,通过一个可控的可重现序列,我们就有机会再现每一次测试的过程,从而更有效的找到问题的所在。
 

c语言里函数rand()和srand()的用法 - -

所以这里提出一个建议,代码中,如果rand()的函数结果关系到算法的结果,那么,必须保证你的rand()调用是可重现的。
rand(void)用于产生一个伪随机unsigned int 整数。

srand(seed)用于给rand()函数设定种子。

srand 和 rand 应该组和使用。一般来说,srand 是对 rand 进行设置。

比如:

    srand((UINT)GetCurrentTime());

    int x = rand() % 100;

    是生成 0 到 100 之间的随机数。

srand()是用来初始化随机种子数的,因为rand的内部实现是用线性同余法做的,他不是真的随机数,
只不过是因为其周期特别长,所以有一定的范围里可看成是随机的,式子如下:

    rand = rand*const_1 + c_var;

srand函数就是给它的第一个rand值。

用"int x = rand() % 100;"来生成 0 到 100 之间的随机数这种方法是不或取的,
比较好的做法是: j=(int)(n*rand()/(RAND_MAX+1.0))   产生一个0到n之间的随机数  

总结:

1)srand()给rand()提供种子

2)srand()中的seed一般由时间函数得,eg srand((UINT)GetCurrentTime()) srand( (unsigned)time( NULL ) ) time()函数得到现在的系统时间...等等  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于微信小程序的家政服务预约系统采用PHP语言和微信小程序技术,数据库采用Mysql,运行软件为微信开发者工具。本系统实现了管理员和客户、员工三个角色的功能。管理员的功能为客户管理、员工管理、家政服务管理、服务预约管理、员工风采管理、客户需求管理、接单管理等。客户的功能为查看家政服务进行预约和发布自己的需求以及管理预约信息和接单信息等。员工可以查看预约信息和进行接单。本系统实现了网上预约家政服务的流程化管理,可以帮助工作人员的管理工作和帮助客户查询家政服务的相关信息,改变了客户找家政服务的方式,提高了预约家政服务的效率。 本系统是针对网上预约家政服务开发的工作管理系统,包括到所有的工作内容。可以使网上预约家政服务的工作合理化和流程化。本系统包括手机端设计和电脑端设计,有界面和数据库。本系统的使用角色分为管理员和客户、员工三个身份。管理员可以管理系统里的所有信息。员工可以发布服务信息和查询客户的需求进行接单。客户可以发布需求和预约家政服务以及管理预约信息、接单信息。 本功能可以实现家政服务信息的查询和删除,管理员添加家政服务信息功能填写正确的信息就可以实现家政服务信息的添加,点击家政服务信息管理功能可以看到基于微信小程序的家政服务预约系统里所有家政服务的信息,在添加家政服务信息的界面里需要填写标题信息,当信息填写不正确就会造成家政服务信息添加失败。员工风采信息可以使客户更好的了解员工。员工风采信息管理的流程为,管理员点击员工风采信息管理功能,查看员工风采信息,点击员工风采信息添加功能,输入员工风采信息然后点击提交按钮就可以完成员工风采信息的添加。客户需求信息关系着客户的家政服务预约,管理员可以查询和修改客户需求信息,还可以查看客户需求的添加时间。接单信息属于本系统里的核心数据,管理员可以对接单的信息进行查询。本功能设计的目的可以使家政服务进行及时的安排。管理员可以查询员工信息,可以进行修改删除。 客户可以查看自己的预约和修改自己的资料并发布需求以及管理接单信息等。 在首页里可以看到管理员添加和管理的信息,客户可以在首页里进行家政服务的预约和公司介绍信息的了解。 员工可以查询客户需求进行接单以及管理家政服务信息和留言信息、收藏信息等。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值