打印
[学习资料]

冒泡排序法(升序排序法)

[复制链接]
1461|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;
}

使用特权

评论回复
5
wiba|  楼主 | 2019-7-25 11:38 | 只看该作者

执行情况:




使用特权

评论回复
6
wiba|  楼主 | 2019-7-25 11:39 | 只看该作者

知识总结:

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


使用特权

评论回复
7
wiba|  楼主 | 2019-7-25 11:39 | 只看该作者

对上面的过程进行总结:


使用特权

评论回复
8
wiba|  楼主 | 2019-7-25 11:40 | 只看该作者

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




使用特权

评论回复
9
wiba|  楼主 | 2019-7-25 11:41 | 只看该作者

实例:


使用特权

评论回复
10
wiba|  楼主 | 2019-7-25 11:41 | 只看该作者

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


使用特权

评论回复
11
mjs0528| | 2019-10-6 20:01 | 只看该作者
感谢分享,感谢楼主!!!

使用特权

评论回复
12
wahahaheihei| | 2019-10-7 07:48 | 只看该作者
最简单的排序算法。

使用特权

评论回复
13
wahahaheihei| | 2019-10-7 07:48 | 只看该作者
还有一个快速排序算法。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

77

主题

3305

帖子

3

粉丝