首页 > 编程笔记

冒泡排序算法(C语言实现)

冒泡排序法的基本思想:两个相邻的数比较大小,较大的数下沉,较小的数上浮。

冒泡排序算法过程如下。
排序法中比较出名的就是冒泡排序,不仅好记,而且简单。该方法是将较小的元素搬移到数组的开始,将较大的元素慢慢地沉到数组的最后,数据如同水缸里的泡沫,较小的数据慢慢上浮,所以称为冒泡排序法。

示例

按照从小到大的顺序对字符数组排序。C语言编程代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 20
/*冒泡排序法*/
void bubble(char *arr,int count)
{
    int i,j,order=1;
    char temp;
    for(j=count;j>1;j--,order++)               /*外循环控制比较轮数*/
    {
        for(i=0;i<j-1;i++)                       /*内循环控制每轮比较的次数*/
        {
            if(arr[i+1]<arr[i])                       /*比较相邻元素*/
            {
                temp=arr[i+1];                       /*交换相邻元素*/
                arr[i+1]=arr[i];
                arr[i]=temp;
            }
        }
        printf("第%d次交换结果:[%s]\n",order,arr);  /*交换后输出字符串*/
    }
}
int main()
{
    char array[MAX];
    int count;
    printf("输入将排序的字符串:\n");
    gets(array);                             /*存储字符数数组*/
    count=strlen(array);                       /*测试字符数数组*/
    bubble(array,count);
    return 0;
}
运行结果:

www.weixueyuan.net
第1次交换结果:[ww.weiwuexuan.nety]
第2次交换结果:[w.weiwuewuan.netxy]
第3次交换结果:[.weiwuewuan.netwxy]
第4次交换结果:[.eiwuewuan.netwwxy]
第5次交换结果:[.eiuewuan.netwwwxy]
第6次交换结果:[.eieuuan.netwwwwxy]
第7次交换结果:[.eeiuan.netuwwwwxy]
第8次交换结果:[.eeian.netuuwwwwxy]
第9次交换结果:[.eeai.nentuuwwwwxy]
第10次交换结果:[.eae.ienntuuwwwwxy]
第11次交换结果:[.ae.eeinntuuwwwwxy]
第12次交换结果:[.a.eeeinntuuwwwwxy]
第13次交换结果:[..aeeeinntuuwwwwxy]
第14次交换结果:[..aeeeinntuuwwwwxy]
第15次交换结果:[..aeeeinntuuwwwwxy]
第16次交换结果:[..aeeeinntuuwwwwxy]
第17次交换结果:[..aeeeinntuuwwwwxy]

首先使用 gets() 函数获取这串字符,然后调用排序函数。

冒泡排序使用双循环,外层循环采用逆序循环方法,控制循环有多少轮,每轮找到的最大的字符放在数组目前下标最大的元素中,然后进入下一轮。内层循环控制每轮比较的次数,比较紧挨着的两个字符,把数值大的字符放在下标较大的位置。

优秀文章