C向量随机生成函数

C向量随机生成函数

写此函数的目的有三,一是用C语言编写程序没有合适的向量生成函数,二是给自己锻炼的机会,三是在blog网站上搜索相关的文章,比较稀缺,想来是和大家分享的好机会,遂写下此文。其实随机向量的生成函数,在matlab里有,是randperm函数,笔者还依稀记得(手动狗头,因为知识已经有些生疏了)。但不能全靠库函数不是,自己动手,丰衣足食。

下面说一下函数的思路,想法有二,听我慢慢道来。

一:用最简单的rand随机数生成函数,在给定数组的情况下生成随机数,填入结果数组中,并且没生成一个新的随机数,就对比之前的结果数组是否有重复出现,如果有就继续随机生成,直到生成所有的随机数向量。缺点是:时间复杂度高,数据量大的时候耗时。缺点是:思路简洁明了,代码量低。

二:也是下面所分享的代码思路。就是动态链表,每生成一个随机数,就从对应的链表中取出随机数,并修改链表的大小和长度,继续以往。优点:时间复杂度低,代码效率高。缺点:涉及到链表的建立和删除,不过也不难,就是拐了一个弯。

带佬见了莫笑,毕竟文章是针对大部分人,且笔者的水平亦有限。因为学习过程中有次想法和机会,就来分享。

函数已经封装完毕,输入参数即可
下面附上生成1-31的随机数向量的结果图
在这里插入图片描述

void rand_vector(int vector[],int length){
	int i = 0;
	struct Node *head,*p1,*p2;
	
	head = (struct Node *)malloc(sizeof(struct Node));
	p1 = head;
	while(i < length){
		p2 = (struct Node *)malloc(sizeof(struct Node));
		p2->val = i+1;
		p2->next = NULL;
		p1->next = p2;
		p1 = p2;
		i++;
	}
	
	i = 0;
	int count,number;
	int len = length;
	while(head->next){
		p1 = head;
		count = 1;
		srand((unsigned)time(NULL));
		number = 1 + rand()%(len);
		
		while(count != number){
			count++;
			p1 = p1->next;
		}
		p2 = p1->next;
		p1->next = p2->next;
		len--;
		vector[i++] = p2->val;
		free(p2);
	}
	free(head);
}
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

原创小白变怪兽

帮助原创小白成为怪兽吧!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值