文章目录
- 一、冒泡排序的原理
- 1.1算法思维:
- 1.2动态图演示:
- 二、实例讲解
- 2.1图解冒泡:
- 第一趟:
- 第二趟
- 第三趟
- 第四趟
- 三、代码讲解
- 3.1定义变量:
- 3.2使用双重循环
- 3.3比较
- 3.4红蓝墨水交换
- 3.5遍历输出
- 代码示例:
- 四、总结
一、冒泡排序的原理
冒泡排序是一种简单的排序算法,它也是一种稳定的排序方法。其实现原理是重复扫描待排序序列,并比较每一对相邻的元素,当该对元素顺序不正确时进行交换。一直重复这个过程,直到没有任何两个相邻元素可以交换,就表明完成了排序。
1.1算法思维:
- 比较相邻的元素。如果第一个比第二个大,就交换它们两个;
- 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素应该会是最大的数;
- 针对所有的元素重复以上的步骤,除了最后一个;
- 重复步骤1~3,直到排序完成。
1.2动态图演示:
二、实例讲解
N个数字要排序完成,要走N-1趟,每一趟的排序次数为(N-1-i)次。使用双重循环,外层循环控制循环多少趟,内层循环控制每一趟的循环次数。
2.1图解冒泡:
示例:有一组待排序序列(5,1,4,2,8)
5个数,(N-1)=4,即要走4趟。
第一趟:
第一趟(N-1-i)=4,即这一趟要比较4次。依次比较每一对相邻的元素,把顺序不对的进行交换,整个过程如下图。这一趟走完后,最终找到最大值8,第一趟结束。
第二趟
第二趟(N-1-i)=3,即这一趟要比较3次。依次比较每一对相邻的元素,把顺序不对的进行交换,整个过程如下图。这一趟走完后,最终找到最大值5,第二趟结束。
第三趟
第三趟(N-1-i)=2,即这一趟要比较2次。依次比较每一对相邻的元素,把顺序不对的进行交换,整个过程如下图。这一趟走完后,最终找到最大值4,第三趟结束。
第四趟
第四趟(N-1-i)=1,即这一趟要比较1次。依次比较每一对相邻的元素,把顺序不对的进行交换,整个过程如下图。这一趟走完后,最终找到最大值2,第四趟结束。
最终成功运用冒泡排序把一组乱序的序列排成有序
三、代码讲解
3.1定义变量:
- 定义一个数组str[],有数据(5,1,4,2,8).
- 定义一个“空瓶子”
int str[]={5,1,4,2,8};
int temp;//定义一个“空瓶子”
3.2使用双重循环
- 外层循环控制循环多少趟
- 内层循环控制每一趟的循环次数
for(int i=0;i<5;i++)外层循环控制循环多少趟
for(int j=0;j<5-1-i;j++)//内层循环控制每一趟的循环次数
3.3比较
if(str[j]>str[j+1])比较大小
3.4红蓝墨水交换
- 交换——红蓝墨水交换
- 先将红墨水倒入空瓶子temp,
- 再将蓝墨水倒入装红墨水的瓶子里
- 最后再将temp瓶子里的墨水倒入装蓝墨水的瓶子里
- 完成红蓝墨水交换
temp=str[j]; //交换——红蓝墨水交换
str[j]=str[j+1]; //先将红墨水倒入空瓶子temp,
str[j+1]=temp; //再将蓝墨水倒入装红墨水的瓶子里
//最后再将temp瓶子里的墨水倒入装蓝墨水的瓶子里
//完成红蓝墨水交换
3.5遍历输出
- 遍历数出序列
for(int i=0;i<5;i++){
printf("%d",str[i]);//遍历数出序列
}
代码示例:
#include<stdio.h>
int main()
{
int str[]={5,1,4,2,8};
int temp;//定义一个“空瓶子”
for(int i=0;i<5;i++)外层循环控制循环多少趟
{
for(int j=0;j<5-1-i;j++)//内层循环控制每一趟的循环次数
{
if(str[j]>str[j+1]){//比较大小
temp=str[j]; //交换——红蓝墨水交换
str[j]=str[j+1]; //先将红墨水倒入空瓶子temp,
str[j+1]=temp; //再将蓝墨水倒入装红墨水的瓶子里
} //最后再将temp瓶子里的墨水倒入装蓝墨水的瓶子里
} //完成红蓝墨水交换
}
for(int i=0;i<5;i++)//遍历数出序列
{
printf("%d",str[i]);
}
return 0;
}
运行结果:
四、总结
冒泡排序思维:
- 比较相邻的元素。如果第一个比第二个大,就交换它们两个;
- 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素应该会是最大的数;
- 针对所有的元素重复以上的步骤,除了最后一个;
- 重复步骤1~3,直到排序完成。