重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
常用的经典算法#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、归并排序
对于这个的话,采用了分而治之的思想。即把一组数据一个个分开排序,在进行合并。并且这个方法的效率也是十分高,由于目前水平还不够,只能自己看懂但是无法讲解,不过我可以推给你去看:
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧