直接上代码,先写一个比较初级的冒泡排序
#include <stdio.h>
int main(void)
{
int num[10] = {6 , 3 , 5 , 10 , 1 , 9 , 2 , 8 , 4 , 7};
int x , y;
for (x = 9 ; x >= 1 ; x--)
{
for (y = 0 ; y <= x - 1 ; y++)
{
if (num[y] > num[y + 1])
{
int temp; //这里是交换num[y]与num[y + 1]的值
temp = num[y];
num[y] = num[y + 1];
num[y + 1] = temp;
}
else
{
continue;
}
}
}
for (int k = 0 ; k <= 9 ; k++)
{
printf("%d\n" , num[k]);
}
return 0;
}
代码的核心是第一个for循环,要注意到每进行一次比较,最大的数就会到达最右边,这样的话在下一次的排序中就不用再去考虑上一次已经被排好的数。
for instance, 在第一次排序(x = 9的时候),数字10被排到了最后边, 我们之后的排序里面就不用再去考虑数字10了。
同理,在完成第二轮排序之后,数字 9 被排到了倒数第二位, 我们之后的排序就不用考虑数字 9 和10 了,以此类推。
这是终端运行结果
现在我们可以考虑一下,是不是可以将数组的大小变成任意大?(也就是说我们输入多少数字就执行所烧数字的冒泡排序?)
显然是可以的。只要将之前的代码中的 x = 9 改成 x = strlen(num) 就好啦(但是要记得加上#include <string.h>呦~)