admin管理员组

文章数量:1487745

【C语言】冒泡排序+优化版

先来介绍一下冒泡排序:

冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法

它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小、首字母从Z到A)错误就把他们交换过来。走访元素的工作是重复地进行,直到没有相邻元素需要交换,也就是说该元素列已经排序完成。

这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。


冒泡排序顾名思义就是将一些没有顺序的数字排的有顺序:

代码语言:javascript代码运行次数:0运行复制
int main()
{
    int a=0; //定义一个接受值
    int b[20]={0}; //定义数组,这就是我们后面要用到的排序数组
    printf("你要输入多少个值:");
    scanf("%d",&a);  
    for(int d=0;d<a;d++)
    {
       printf("输入第%d个数:",d+1);
       scanf("%d",&b[d]);
    }
    s_mpqx(b,a);
    return 0;
}

我们搞定了数组的内容后现在就可以传值和传址,进行排序:

代码语言:javascript代码运行次数:0运行复制
void s_mpqx(int* b[],int a) //数组是传址,统计数是传值
{
    int i,j;
    int ret=0;
    for(i=0;i<a-1;i++)  
    {
        for(j=0;j<a-i-1;j++) 
        {
            if(b[j]>b[j+1])
            {
                ret=b[j];
                b[j]=b[j+1];
                b[j+1]=ret;    
            }            
        }
    }
}

这里需要强调一下,10个数字只需要比9次就可以了,所以要减一(a-1)

5f05d7106038465d8520fe5490a71946.png

而比完一次就少一次,所以在比9次的基础上(a-1-i)


当然排序结束,还需要看是否已经排序成功了,完整的代码:

代码语言:javascript代码运行次数:0运行复制
#include <stdio.h>
void s_mpqx(int* b[],int a) //数组是传址,统计数是传值
{
    int i,j;
    int ret=0;
    for(i=0;i<a-1;i++)  
    {
        for(j=0;j<a-i-1;j++) 
        {
            if(b[j]>b[j+1])
            {
                ret=b[j];
                b[j]=b[j+1];
                b[j+1]=ret;    
            }            
        }
    }
}

int main()
{
    int a=0; //定义一个接受值
    int b[20]={0}; //定义数组,这就是我们后面要用到的排序数组
    printf("你要输入多少个值:");
    scanf("%d",&a);  
    for(int d=0;d<a;d++)
    {
       printf("输入第%d个数:",d+1);
       scanf("%d",&b[d]);
    }
    s_mpqx(b,a);
    for(int z=0;z<a;z++)
    {
        printf("%d ",b[z]);
    }        
    return 0;
}

优化版:

在上面排序的过程中,不难发现有很多的步骤是重复的,既浪费时间又无效,这个时候可以让计算机提前去判断是否符号条件,如果符合条件了再进行排序,既省时间又高效:

代码语言:javascript代码运行次数:0运行复制
void s_mpqx(int* b[], int a) //数组是传址,统计数是传值
{
    int i, j;
    int ret = 0;    
    int pd=1;
    for (i = 0; i < a - 1; i++)
    {
            pd=1;
        for (j = 0; j < a - i - 1; j++)
        {
            pd=1;
            if (b[j] > b[j + 1])
            {
                ret = b[j];
                b[j] = b[j + 1];
                b[j + 1] = ret;
                pd=0;
            }
        }
       if(pd==1)
        {
           break;
        }
    }
}

我们首先需要让数值进行一次比较,在所有数字都是按照正确的顺序时,pd的值不变,在外层for循环中直接退出即可,省去了多次去比较而浪费时间 这样我们的冒泡排序和优化后的就诞生了,有问题的可以私聊!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。 原始发表:2023-10-08,如有侵权请联系 cloudcommunity@tencent 删除排序数组统计优化int

本文标签: C语言冒泡排序优化版