哈罗,前来观看的朋友们你们好呀!
今天我把之前学过的冒泡排序又独自的敲了一遍,在此我分享一些我在敲的过程中的一些心得吧,希望对你们学习冒泡排序有帮助。
首先冒泡排序包括两层循环,外层的循环控制的是你需要排序的次数,比如说你需要将0-10进行排序,那么你就需要循环10次,记住排序的次数是你需要排序数字的个数减一;
内层循环功能是每次将相邻两个数字进行比较,然后按照你冒泡排序的方向来交换二者之间的位置。目的就是在外层循环一次之后,能够在数组中找到一个最大或者最小的数放到相应的位置(这要看你是从小到大排还是从大到小排),往后的每一次循环都是在规定的范围内找到最值并放到对应的位置里面;
在这,我还想说一个困扰我的问题。之前学习冒泡排序的时候,内层循环的循环条件:j<length-i-1,当时很懵为啥这里要 -1 ,想过之后才明白,我们的数组的下标是从0开始的,因此我们每次循环的时候都需要向前移一位,而且这样才能满足每次循环一次之后能把选出来的数放在下一次循环的范围之外。如果你们不信,可以将需要排序的数从数组下标为1开始存储,在进行排序,那样的话内层循环条件就不在需要-1了。
#include <stdio.h>
int main()
{
//写冒泡排序
//先定义数组
int array1[11] = { 0,3,4,2,5,1,6,7,9,10,8 };
//求数组的长度
int length = sizeof(array1) / sizeof(array1[0]);
//写排序方法
int a, b;
for (a = 1; a < length - 1; a++)
{
for (b = length-1; b>a; b--)
{
if (array1[b] > array1[b - 1])
{
int temp = array1[b];
array1[b] = array1[b - 1];
array1[b - 1] = temp;
}
}
}
//输出结果
printf("最后的结果为:");
for (int i = 0; i < length; i++)
{
printf("%d", array1[i]);
}
return 0;
}
以上是我写的冒泡排序(从大到小排),第一个数可以不用管,供大家参考。