假设对数组进行排序,以便首先列出最小值。如果array [2]
存储的值是20
,并且array [3]
存储的值是5
,则这两个元素将需要交换它们的值。
要实现这一点,可以在语句中使用临时变量,如下所示:
temp=array[2]; /* 将 20 保存到 temp */
array[2]=array[3]; /* 将 5 保存到 array[2] */
array[3]=temp; /* 将 20 保存到 array[3] */
在冒泡排序中,每个数组元素与序列中的每个其他数组元素进行比较。当一个值大于(或小于)另一个值时,将交换它们的值。
否则,比较继续,循环遍历数组中比较的每个可能的排列。以下代码显示了如何实现冒泡排序。
示例代码
#include <stdio.h>
#define SIZE 10
int main()
{
int bubble[] = { 95, 60, 6, 87, 50, 24 , 0 ,100, 120};
int inner,outer,temp,x;
/* 显示数组 */
puts("原始数组中的元素值:");
for(x=0;x<SIZE;x++)
printf("%d\t",bubble[x]);
putchar('\n');
/* 冒泡排序 */
for(outer=0;outer<SIZE-1;outer++)
{
for(inner=outer+1;inner<SIZE;inner++)
{
if(bubble[outer] > bubble[inner])
{
temp=bubble[outer];
bubble[outer] = bubble[inner];
bubble[inner] = temp;
}
}
// 每一轮排序的结果
for(x=0;x<SIZE;x++)
printf("%d\t",bubble[x]);
putchar('\n');
}
/* 显示排序后的数组 */
puts("排序后的数组的元素值:");
for(x=0;x<SIZE;x++)
printf("%d\t",bubble[x]);
putchar('\n');
return(0);
}
执行上面示例代码,得到以下结果:
hema@ubuntu:~/book$ gcc main.c
hema@ubuntu:~/book$ ./a.out
原始数组中的元素值:
95 60 6 87 50 24 0 100 120 32764
0 95 60 87 50 24 6 100 120 32764
0 6 95 87 60 50 24 100 120 32764
0 6 24 95 87 60 50 100 120 32764
0 6 24 50 95 87 60 100 120 32764
0 6 24 50 60 95 87 100 120 32764
0 6 24 50 60 87 95 100 120 32764
0 6 24 50 60 87 95 100 120 32764
0 6 24 50 60 87 95 100 120 32764
0 6 24 50 60 87 95 100 120 32764
排序后的数组的元素值:
0 6 24 50 60 87 95 100 120 32764
上面的代码有三个部分,每个部分都有一个注释:
- 显示原始数组
- 对数组进行排序
- 显示已排序的数组
定义了常量SIZE
。排序本身涉及嵌套的for
循环:外循环和内循环。外环循环遍历整个数组,一次一步。内部循环将其位置设置比外部循环的位置高一位,并逐个递增比较每个值,符合条件时交换它们的值。