算法基础(蛮力法)

算法的含义
算法是一系列解决问题的清晰指令,也就是说,对于符合一定规范的输入,能够在有限时间内获得所要求的输出 —摘自《算法设计与分析基础》
算法的时间复杂度
时间复杂度并不指算法运行所需要的时间,而是算法执行的次数。
一、蛮力法

1、冒泡排序
比较列表中相邻的元素,如果他们是逆序的话就交换他们的位置,重复多次以后,最终,最大的元素就到达了列表的最后一个位置,第二遍操作时将第二大的元素沉下去,一直这样做,直到n-1遍以后该列表就排序完成

//冒泡排序
void bubble_sort(int *arr,size_t len)
{
	for(int i=len-1;i>0;i--)
	{
		bool flag=true;
		for(int j=0;j<i;j++)
		{
			if(arr[j]>arr[j+1])
			{
				int t=arr[j];
				arr[j]=arr[j+1];
				arr[j+1]=t;
				flag=true;
			}
		}
		if(flag) break;
	}
}

冒泡排序是稳定的排序,它具有对数据的敏感性,如果列表数据已经基本有序,那么使用冒泡排序是比较快速的
冒泡排序的时间复杂度:最优情况O(N),最劣O(N^2)

2、选择排序
选择排序开始的时候,我们扫描整个列表,找到最小的元素和第一个进行交换,将最小的元素放在它最终的位置上。n-1遍以后列表就是有序的了。

//选择排序
void select_sort(int* arr,size_t len)
{
	for(int i=len-1;i>0;i--)
	{
		int max=i;
		for(int j=0;j<i;j++)
		{
			if(arr[j]>arr[max])
			{
				max=j;
			}
			if(max !=i)
			{
				int i=arr[j];
				arr[j]=arr[max];
				arr[max]=i;
			}
		}
	}
}

选择排序实际上是冒泡排序的变种,和冒泡排序不同的是,它并不直接交换元素的位置,而是记录元素的下标,比较完成以后再进行位置交换。在数据比较混乱的情况下,它比冒泡排序要快。但是选择排序也失去了对数据的敏感性
选择排序的时间复杂度:O(N^2)

3、顺序查找
该算法是典型的蛮力算法,它有着蛮力法典型的优点:简单 缺点:效率低下
该算法只是简单的将给定列表的连续元素和给定的查找键进行比较,直到遇到一个匹配的元素(成功查找),或遍历了一遍列表(失败查找)

//顺序查找
int order_find(int* arr,size_t len,int key)
{
	for(int i=0; i<len; i++)
	{
		if(arr[i] == key)
			return i;
	}
	return -1;
}
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值