易百教程

数组排序

假设对数组进行排序,以便首先列出最小值。如果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循环:外循环和内循环。外环循环遍历整个数组,一次一步。内部循环将其位置设置比外部循环的位置高一位,并逐个递增比较每个值,符合条件时交换它们的值。