[学习资料] 冒泡排序法(升序排序法)

[复制链接]
2106|12
 楼主| wiba 发表于 2019-7-25 11:35 | 显示全部楼层 |阅读模式
数字的排序:

#include <stdio.h>

#define SIZE 10
int main()
{
    int a[SIZE]={12 ,43,9,13,67,98,101,89,3,35};//十个数的无序数列
    int i,j,t;
    printf("此程序使用冒泡排序法排列无序数列!\n");
    //冒泡排序
    for(i=0;i<10-1;i++)//n个数的数列总共扫描n-1次
    {
        for(j=0;j<10-i-1;j++)//每一趟扫描到a[n-i-2]与a[n-i-1]比较为止结束
        {
            if(a[j]>a[j+1])//后一位数比前一位数小的话,就交换两个数的位置(升序)
            {
               t=a[j+1];
               a[j+1]=a[j];
               a[j]=t;
            }
        }
    }

    printf("排列好的数列是:\n");
    //输出排列好得吃数列
    for(i=0;i<10;i++)
    {

        printf("%d ",a[i]);
    }
    return 0;

}

 楼主| wiba 发表于 2019-7-25 11:36 | 显示全部楼层
字符排序:
#include <stdio.h>

#define SIZE 10
int main()
{
    char a[SIZE]={'i','l','o','v','e','y','o','u','y','x'};//十个数的无序数列
    int i,j;
    char t;
    printf("此程序使用冒泡排序法排列无序数列!\n");
    //冒泡排序
    for(i=0;i<10-1;i++)//n个数的数列总共扫描n-1次
    {
        for(j=0;j<10-i-1;j++)//每一趟扫描到a[n-i-2]与a[n-i-1]比较为止结束
        {
            if(a[j]>a[j+1])//后一位数比前一位数小的话,就交换两个数的位置(升序)
            {
               t=a[j+1];
               a[j+1]=a[j];
               a[j]=t;
            }
        }
    }

    printf("排列好的字符组是:\n");
    //输出排列好得吃数列
    for(i=0;i<10;i++)
    {

        printf("%c ",a[i]);
    }
    return 0;
}


 楼主| wiba 发表于 2019-7-25 11:36 | 显示全部楼层
用函数来解决这个问题:
#include <stdio.h>


void function(char a[],int);//尤其注意,此处的函数声明必须是char a[],因为这里穿的是地址,不能仅仅使用char

int main()
{
    int i;
    char a[10]={'i','l','o','v','e','y','o','u','y','x'};//十个数的无序字符数列
    printf("此程序使用冒泡排序法排列无序数列!\n");
    function(a,10);//调用冒泡排序
    printf("排列好的字符组是:\n");
    //输出排列好得吃数列
    for(i=0;i<10;i++)
    {

        printf("%c ",a[i]);
    }
    return 0;
}
 楼主| wiba 发表于 2019-7-25 11:36 | 显示全部楼层
void function(char a[],int m)
{
    //冒泡排序
    int i,j;
    char t;
    for(i=0;i<m-1;i++)//n个数的数列总共扫描n-1次
    {
        for(j=0;j<m-i-1;j++)//每一趟扫描到a[n-i-2]与a[n-i-1]比较为止结束
        {
            if(a[j]>a[j+1])//后一位数比前一位数小的话,就交换两个数的位置(升序)
            {
               t=a[j+1];
               a[j+1]=a[j];
               a[j]=t;
            }
        }
    }
    return;
}
 楼主| wiba 发表于 2019-7-25 11:38 | 显示全部楼层

执行情况:




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| wiba 发表于 2019-7-25 11:39 | 显示全部楼层

知识总结:

冒泡排序法:也叫升序排序法,但是相比起二分法查找只能应用于有序数列,二如何将一个无序数列变的有序就可以使用冒泡排序法!!!


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| wiba 发表于 2019-7-25 11:39 | 显示全部楼层

对上面的过程进行总结:


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| wiba 发表于 2019-7-25 11:40 | 显示全部楼层

该思想体现在成续上的解法是:




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| wiba 发表于 2019-7-25 11:41 | 显示全部楼层

实例:


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| wiba 发表于 2019-7-25 11:41 | 显示全部楼层

冒泡排序不仅仅可以应用于数字同样可以应用于字符字母的快速排序:


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
mjs0528 发表于 2019-10-6 20:01 | 显示全部楼层
感谢分享,感谢楼主!!!
wahahaheihei 发表于 2019-10-7 07:48 | 显示全部楼层
最简单的排序算法。
wahahaheihei 发表于 2019-10-7 07:48 | 显示全部楼层
还有一个快速排序算法。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

78

主题

3313

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部