-
冒泡排序
-
今天给大家介绍的是C语言的经典小白算法---------冒泡排序,此算法的原理类似于烧开水的泡泡,一般大的泡泡会比较快往上走,小的则慢点浮起,因此形象的称为冒泡排序。此处关键为弄清楚比较的轮数和每轮比较的数的个数,大的数会往右边排,形成从小到达的排序,另外的关键点在于定义一个中间值来作为数的中间站,使得数的位置能够顺畅的交换。
- 关键:(1)弄清楚比较的轮数和每轮比较的数的个数
(2)定义一个中间值来作为数的中间站
#include <stdio.h>
int main()
{
int i;//比较的轮数
int j;//每轮比较的次数
int med;//替换的中间数据
int rst[5]; //定义数组rst含有5个元素
printf("请输入5个数: "); //打印这句话
for(i = 0; i < 5; i++) //只能有5个元素所以for循化找出5个数
{
scanf("%d", & rst[i]); //将输入的5个数给rst数组的元素赋值
}
for(i = 0; i < 4; i++) //一共五个数需要进行四轮比较才可以得出最终值
{
for(j = 0; j < 4 - i; j++)/*一共5个数需要比较四次,每一轮比较少一次比较的次数,比如第一轮比较需要比较四次,
最终最小值就在最后一位元素确定,第二轮比较就只有四个数比较三次*/
{
if(rst[j] < rst[j+1])//if语句进行比较
{
med = rst[j]; //条件成立把当前元素给中间值
rst[j] = rst[j + 1];//把后一位元素给当前元素
rst[j + 1] = med; //把中间值给后一位元素,这时后一位元素为较小值
}
}
}
printf("排序后的结果为:");//打印这句话
for(i = 0; i < 5; i++)//for语句将得到的数组排序打印
{
printf("%d",rst[i]);
}
printf("\n");//换行
return 0;
}
99 10 33 77 2
思路:在5个数中通过两两比较,找到最大的数,放到这5个数中的
最右边
在剩下的四个数中两两比较,找到最大的数,放到这四个数中的最右边
在剩下的三个数中两两比较。。。。。。。。。。。。。。。。
在剩下的两个数中两两比较。。。。。。。。。。
(定义好int i, j;i代表比较趟数,j代表每趟比较次数)
第一趟:将5个数中最大的数移动到了最右边
第一次比较:10 99 33 77 2
第二次比较:10 33 99 77 2
第三次比较:10 33 77 99 2
第四次比较:10 33 2 99
第二趟:将4个数中最大的数移动到最右边
第一次比较:10 33 77 2
第二次比较:10 33 77 2
第三次比较:10 33 2 77
第三趟:将3个数中最大的数移动到最右边
第一次比较:10 33 2
第二次比较:10 2 33
第四趟:将2个数中最大的数移动到最右边
第一次比较:2 10
最终结果:2 10 33 77 99
For(i = 0; i < 4; i++)
{
For(j = 0; j < 4-i; j++)
{
If(Arr[j] > arr[j+1])
{
Int tmp = arr[j];
Arr[j] = arr[j+1];
Arr[j+1] = tmp;
}
}
}