冒泡排序(易懂)
文章目录
- 引言
- 一、算法思想
- 二、实现步骤
- 1.步骤流程
- 2.代码实现(C)
- 三、算法分析
- 总结
引言:
算法重在思想,掌握其核心思想,然后才能熟练使用。
举个栗子:
时间:学校军训期间 对象:软件学院的军训
事件:
教官:大声喊道,列队,分为两队,男生一队,女生一队
不过一会,学员就把队列站好了,看来对教官的恐惧还是一如既往的
教官:按照身高从低到高排,但是需要保持原来的队列,最多一下两个人换位置,不然会出现混乱的场面。
学员:我应该站在哪儿?
教官:最后一个人,跟你前面的比一下,谁高?
最后一个学员说:报告教官,我前面的人高;
教官:换位置;
学员:是
学员:接下来呢:
教官:还要我教你?你继续跟你前面的人比呀;
然后第一轮下来,最前面站着最矮的人,其余同理轮次
教官:给你们三分钟,给我排好。
。。。
学员:难度这就是传说中的冒泡排序?教官真厉害。
一、算法思想
每次比较相邻两数,顺序错则交换两数。
二、实现步骤
1.步骤流程
1.选中两数:(一般从最右端开始)
2.比较两数,小则向前移动
3.直到与最后一个数比较
4.重复n-1趟
注:这里每一趟会比较8次
2.代码实现
代码如下(C):
#include<stdio.h>
int main()
{int a[100];int i,j,t,n; scanf("%d",&n);for(i=1;i<=n;i++)//输入n个数 {scanf("%d",&a[i]); }for(i=1;i<=n-1;i++)//冒泡排序核心算法;双重循环 {for(j=1;j<=n-i;j++){if(a[j]<a[j+1]){t=a[j];a[j]=a[j+1];a[j+1]=t;}}}for(i=1;i<=n;i++){printf("%d ",a[i]); }getchar();//用于暂停程序,方便查看结果 return 0;
}
3.算法分析
时间复杂度:O(N*N)
这里的时间复杂度是非常高的
总结
冒泡排序,核心就是双重循环;
冒泡排序(易懂)
文章目录
- 引言
- 一、算法思想
- 二、实现步骤
- 1.步骤流程
- 2.代码实现(C)
- 三、算法分析
- 总结
引言:
算法重在思想,掌握其核心思想,然后才能熟练使用。
举个栗子:
时间:学校军训期间 对象:软件学院的军训
事件:
教官:大声喊道,列队,分为两队,男生一队,女生一队
不过一会,学员就把队列站好了,看来对教官的恐惧还是一如既往的
教官:按照身高从低到高排,但是需要保持原来的队列,最多一下两个人换位置,不然会出现混乱的场面。
学员:我应该站在哪儿?
教官:最后一个人,跟你前面的比一下,谁高?
最后一个学员说:报告教官,我前面的人高;
教官:换位置;
学员:是
学员:接下来呢:
教官:还要我教你?你继续跟你前面的人比呀;
然后第一轮下来,最前面站着最矮的人,其余同理轮次
教官:给你们三分钟,给我排好。
。。。
学员:难度这就是传说中的冒泡排序?教官真厉害。
一、算法思想
每次比较相邻两数,顺序错则交换两数。
二、实现步骤
1.步骤流程
1.选中两数:(一般从最右端开始)
2.比较两数,小则向前移动
3.直到与最后一个数比较
4.重复n-1趟
注:这里每一趟会比较8次
2.代码实现
代码如下(C):
#include<stdio.h>
int main()
{int a[100];int i,j,t,n; scanf("%d",&n);for(i=1;i<=n;i++)//输入n个数 {scanf("%d",&a[i]); }for(i=1;i<=n-1;i++)//冒泡排序核心算法;双重循环 {for(j=1;j<=n-i;j++){if(a[j]<a[j+1]){t=a[j];a[j]=a[j+1];a[j+1]=t;}}}for(i=1;i<=n;i++){printf("%d ",a[i]); }getchar();//用于暂停程序,方便查看结果 return 0;
}
3.算法分析
时间复杂度:O(N*N)
这里的时间复杂度是非常高的
总结
冒泡排序,核心就是双重循环;