ok,家人们,我今天来将一下C语言中的冒泡排序,希望这篇文章可以对大家有所帮助,我会进行细致分析,话不多说,go go go!!!
冒泡分析:(假设是升序排列)
1:利用for进行10次外部循环。(只是起到循环的作用,与内部没有关系)
2:再利用for进行内部循环。(每一次进行内循环都会少一次)
第一次循环,从第一个数开始,如果第一个数字比第二个数字大,那么进行交换数字,然后是第二个数与第三个数字进行比较,以此类推,直到最后两个数比较进行完,第一次内循环结束。通过这个过程我们可以判断出最大的数已经排到了最后一位,因为是每个相邻的数都进行了比较,因此下一次内部循环不必再比较最后两位,已经确定了最大的数在最后一位,所以接下来每次的内部循环次数少了一次。
冒泡排序的实现通常使用两层嵌套循环。外层循环控制总共进行多少轮比较,而内层循环执行相邻元素的比较和交换操作。
OK,看完解析我们来实战吧,让我们更加清楚怎么使用冒泡排序。
题目:
输⼊10个整数,然后使⽤冒泡排序对数组内容进⾏升序排序,然后打印数组的内容。
#include<stdio.h>
int main()
{
int arr[10] = { 0 };
int i = 0;
for (i = 0; i < 10; i++)
{
scanf("%d", &arr[i]);
}
int j = 0;
for (i = 0; i < 10; i++)//外部循环
{
for (j = 0; j < 10 - 1 - i; j++)//内部循环
{
if (arr[j] > arr[j + 1])//条件满足,数字交换
{
int temp;
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
for (i = 0; i < 10; i++)//输出交换后的数组
{
printf("%d ", arr[i]);
}
return 0;
}
家人们,我们现在来分析一下内部循环条件 j<10-i-1。
因为我们的数组只有10 个数,所以只能到 arr[9] ,下面表达式中有 arr[j+1],当我们 i=0 时,我们内部第一次循环的 j 最大为 8,所以表达式就有了-1这一项,i起始数字0,- i 就是满足了我们每次循环少一次。
哈哈哈,到这里就结束了,感谢观看🥰🥰🥰