【常用的经典算法#C语言】

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

常用的经典算法#C语言


前言

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

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

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

#include <stdio.h>
int 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、连乘积
类似于累加和,不同的是这里是相乘,代码如下:

#include <stdio.h>
int 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、求最大最小值
在一组数据中找到最大或者最小值,这个数据可以是一维线性的,也可以是二维矩阵的。

一维:在这里就求最大值了

#include <stdio.h>
int 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;
}

二维:这里求最小值

#include <stdio.h>
int 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、折半查找(二分查找法)
这么说吧,假如一颗钻石被自由女神像吃进肚子了,然后你想要找到它,于是胆小的你就把自由女神像炸成了两半,结果不在下半部分,那么你就继续把上半部分炸成两半,那你应该懂折半查找了吧。话不多说,给代码:

#include <stdio.h>
int 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次。代码如下:

#include <stdio.h>
int 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、冒泡排序
个人认为与选择法类似,这里是把最大值找到,代码如下:

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

4、快速排序
不太好说,又不想抄别人的,就推荐你去看吧

快速排序(C语言)

冬雪如春 本文链接: https://blog.csdn.net/weixin_43296982/article/details/123098472

加油,成为更棒的自己!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值