【常用的经典算法#C语言】-创新互联

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

成都创新互联公司坚持“要么做到,要么别承诺”的工作理念,服务领域包括:成都网站制作、做网站、外贸营销网站建设、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的龙圩网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!
常用的经典算法#C语言
前言

`简单的记录自己的成长过程吧

一、累加和,连乘积,大最小值

1、累加和
顾名思义就是把数字一个一个相加然后求和,代码如下:

#includeint main()
{//从一加到一百
	int sum = 0;
	for (int i = 1; i<= 100; i++)
	{sum = sum + i;//累加法
	}
	printf("1+2+…+99+100=%d\n", sum);//打印和
return 0;
}

2、连乘积
类似于累加和,不同的是这里是相乘,代码如下:

#includeint main()
{int sum = 1;
	for (int j = 1; j<= 25; j++)//数字过大的话int类型存不下
	{sum *= j;//连乘积
	}
	printf("1*2*…*99*100=%d\n", sum);
	return 0;
}
//结果应该是1*2*…*99*100=2076180480,是相当大的一个数字了。

3、求大最小值
在一组数据中找到大或者最小值,这个数据可以是一维线性的,也可以是二维矩阵的。

一维:在这里就求大值了

#includeint main()
{int arr[10] = {1,2,45,67,54,34,89,98,34,57 };//定义一个一维数组存放数据
	int max = arr[0];//假设第一个是大值
	for (int i = 0; i< 10; i++)//利用for循环把数组历遍
	{if (arr[i] >max)
			max = arr[i];
	}
	printf("max=%d", max);
	return 0;
}

二维:这里求最小值

#includeint main()
{int arr[3][3] = {{1,2,3},{4,5,6},{7,8,9} };//定义一个二维数组来存放数据
	int min = arr[0][0];//假设第一个为最小值
	for (int j = 0; j< 3; j++)//历遍二维数组
	{for (int i = 0; i< 3; i++)
		{	if (arr[j][i]< min)
				min = arr[j][i];
		}
	}
	printf("min=%d", min);
	return 0;
}
二、查找

1、顺序查找
亲应该都知道,我就不赘述了
2、折半查找(二分查找法)
这么说吧,假如一颗钻石被自由女神像吃进肚子了,然后你想要找到它,于是胆小的你就把自由女神像炸成了两半,结果不在下半部分,那么你就继续把上半部分炸成两半,那你应该懂折半查找了吧。话不多说,给代码:

#includeint main()
{int n;
	scanf("%d", &n);
	int arr[10] = {2,4,35,56,7,67,9,8,10,99 };//定义一个一维数组来存放数据
	int left = 0;//最左边下标
	int right = 9;//最右边下标
	int mid = (left + right) / 2;//神像一分为二
	while (left<=right)//进入循环
	{if (arr[mid]< n)//中间的数字小于你要查找的数字
		{	left = mid + 1;
			mid = (left + right) / 2;
		}
		if (arr[mid] >n)//中间的数字大于你要查找的数字
		{	right = mid - 1;
			mid = (left + right) / 2;
		}
		if (arr[mid] == n) //找到了数字,mid就是它在数组中的下标
		{	printf("找到了,下标是:%d", mid);
			break;
		}
	}
	if (left >right)//跳出循环有两种情况:判断其中一种为找不到的情况
		printf("找不到数字,建议你换一个");
	return 0;
}
三、排序

1、选择法排序
就是先找最小的把它放到第一个,然后找第二小的把它放在第二个,后面的数字也是如此,到最后一个。这就相当于你有100个数字的话,你就要找99次。代码如下:

#includeint main()
{//选择法
	int arr[] = {13,34,65,87,67,49,27 };//定义一个一维数组来存放数据
	int p = 0;//定义一个变量来存放最小的数字的下标
	for (int j = 0; j< 7; j++)
	{int min = arr[j];
		for (int i = j+1; i< 7; i++)
		{	if (arr[i]< min)
			{		min = arr[i];
				p = i;
			}
		}
		int temp = arr[j];//将第几小的数字放在第几个位置上
		arr[j] = arr[p];
		arr[p] = temp;
	}
	for (int k = 0; k< 7; k++)
	{printf("%d ", arr[k]);//打印出来看看
	}
	return 0;
}
//13 27 34 49 65 67 87

2、冒泡排序
个人认为与选择法类似,这里是把大值找到,代码如下:

#includeint main()
{//冒泡排序
	int arr[] = {12,43,6,45,78,88,100 };
	for (int i = 0; i< 6; i++)
	{if (arr[i] >arr[i + 1])//前一个与后面一个比较,进行交换
		{	int temp = arr[i];
			arr[i + 1] = arr[i];
			arr[i] = temp;
		}
	}
	for (int j = 0; j< 7; j++)
	{printf("%d ", arr[j]);
	}
	return 0;
}

3、归并排序
对于这个的话,采用了分而治之的思想。即把一组数据一个个分开排序,在进行合并。并且这个方法的效率也是十分高,由于目前水平还不够,只能自己看懂但是无法讲解,不过我可以推给你去看:

借鉴---白话经典算法系列之五 归并排序的实现 和这篇博客图解排序算法(四)之归并排序 - dreamcatcher-cx - 博客园

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


网页题目:【常用的经典算法#C语言】-创新互联
网站网址:http://scyanting.com/article/csjihi.html