嗨,欢迎来到异星球,我是小怪同志。这篇文章主要讲认识算法,请一起学习吧。
一、算法是什么
算法是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。如果一个算法有缺陷,或不适合于某个问题,执行这个算法将不会解决这个问题。不同的算法可能用不同的时间,空间或效率来完成同样的任务。一个算法的优劣可以用空间复杂度和时间复杂度来衡量。
在计算机中,我们一听算法,可能觉得头大,觉得很难,其实算法在我们日常生活中是普遍存在的。比如我们日常生活的吃穿住行所花费的时间都来源于算法,再比如我们领快递所需要的时间,做核酸所需要的时间,等核酸结果所需要的时间等,都属于算法。
二、算法有什么用
随着计算机的发展,算法在计算机方面已有广泛的发展及应用,如用随机森林算法来进行头部姿势的估计,用遗传算法来解决弹药装载问题,使用信息加密算法进行网络传输,使用并行算法进行数据挖掘 ,以及协同过滤算法在个性化推荐中的应用等 。
可能上述的很难以理解,那么用通俗的话来讲,算法可以帮助你用更加简洁的方式去计算,去做题,去完成生活中一些很难懂的事情。
三、冒泡排序
1.算法思路
(1)比较相邻的元素,如果第一个比第二个大,就交换它们两个,也就是两两对比。
(2)对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。
(3)针对所有的元素重复以上的步骤,除了最后一个。
(4)持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
2.算法分析
假如现在有十个元素进行冒泡排序,从小到大排
十个元素分别是:10 9 8 7 6 5 4 3 2 1
十个元素下标是:0 1 2 3 4 5 6 7 8 9
第一趟排序
10 9 8 7 6 5 4 3 2 1
9 10 8 7 6 5 4 3 2 1
9 8 10 7 6 5 4 3 2 1
9 8 7 10 6 5 4 3 2 1
9 8 7 6 10 5 4 3 2 1
……
9 8 7 6 5 4 3 2 1 10
第二趟排序
9 8 7 6 5 4 3 2 1 10
8 9 7 6 5 4 3 2 1 10
8 7 9 6 5 4 3 2 1 10
8 7 6 9 5 4 3 2 1 10
8 7 6 5 9 4 3 2 1 10
……
8 7 6 5 4 3 2 1 9 10
根据冒泡排序可知
10个元素,要进行9趟冒泡排序。
若n个元素,则进行n-1趟冒泡排序。
第一趟 10个元素→9对
第二趟 9个元素→8对
第三趟 8个元素→7对
·····
3.具体代码
include <stdio.h>
void bubble_sort (int arr[],int sz)
{
// 确定冒泡排序的趟数 sz-1趟
int i=0;
for (i=0;i<sz-1;i++)
{
//每一趟冒泡排序对比次数 sz-1-i次
int j=0;
for(j=0;j<sz-1-i;j++)
{
//每一趟冒泡排序 从小到大排序
if(arr[j]>arr[j+1])
{
//将对比的元素进行交换
int tmp =arr[j];
arr[j]=arr[j+1];
arr[j+1]=tmp;
}
}
}
}
int main ()
{int arr[]={9,8,7,6,5,4,3,2,1,0};
//数组的下标是从0开始的0~9
int i=0;
int sz=sizeof(arr)/sizeof(arr[0]);
//sz计算整个数组的大小,整体就是计算元素个数 //对arr进行排序,从小到大排序
//arr是数组,我们对数组进行传参,实际上传递过去的是数组arr首元素的地址&arr【0】
bubble_sort(arr,sz); //冒泡排序函数
for (i=0;i<sz;i++)
{
printf("%d",arr[i]);
}
return 0;
}