数媒在线课堂 C语言—冒泡排序!
冒泡排序是一种简单的排序算法,也是入门算法中的经典之一。它的基本思想是多次遍历待排序的序列,每次将相邻的两个元素进行比较,如果顺序不对就交换它们的位置,这样一遍遍历下来,最大(或最小)的元素就会跑到序列的末尾。然后再对剩下的 n-1 个元素重复上述操作,直到整个序列被有序。
冒泡排序的原理是:从左到右,相邻元素进行比较。每次比较一轮,就会找到序列中最大的一个或最小的一个。这个数就会从序列的最右边冒出来。
以从小到大排序为例,第一轮比较后,所有数中最大的那个数就会浮到最右边;第二轮比较后,所有数中第二大的那个数就会浮到倒数第二个位置……就这样一轮一轮地比较,最后实现从小到大排序。
C语言是使用最广泛的编程语言之一,而冒泡排序也是最常用的算法之一。在C语言中,我们可以通过循环和条件语句实现冒泡排序。下面我来详细介绍一下如何使用C语言实现冒泡排序。
首先,我们需要定义一个待排序的数组,这个数组可以是任意长度的,但是我们必须为其分配内存空间,这里我们定义一个长度为10的数组,代码如下:
int a[10] = {5, 7, 3, 2, 9, 4, 1, 8, 6, 0};
接下来,我们要用循环遍历这个数组,每一次循环都比较相邻的两个元素的大小,并交换它们的位置。因为每一次循环都会将一个最大(或最小)的元素移动到末尾,所以我们要循环 n-1 次(n 表示数组长度),代码如下:
int i, j;
for (i = 0; i < 9; i++) {
for (j = 0; j < 9-i; j++) {
if (a[j] > a[j+1]) {
int temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
}
这里我们使用了两个嵌套的循环,外层循环变量 i 表示已经排好序的元素个数,初始值为0,每一次循环将会排好一个最大(或最小)的元素。内层循环变量 j 表示本次需要比较的元素,初始值也为0,每一次循环将会比较相邻的两个元素的大小,并交换它们的位置。注意,由于内循环会比较从0到 n-i-1 的元素,所以循环次数逐渐减少。
最后,我们输出排好序的数组即可,代码如下:
for (i = 0; i < 10; i++) {
printf("%d ", a[i]);
}
完整代码如下:
#include <stdio.h>
int main() {
int a[10] = {5, 7, 3, 2, 9, 4, 1, 8, 6, 0};
int i, j;
for (i = 0; i < 9; i++) {
for (j = 0; j < 9-i; j++) {
if (a[j] > a[j+1]) {
int temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
}
for (i = 0; i < 10; i++) {
printf("%d ", a[i]);
}
return 0;
}
