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

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

先来介绍一下冒泡排序:

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

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

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


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

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;
}

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

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)

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


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

#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;
}

优化版:

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

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循环中直接退出即可,省去了多次去比较而浪费时间

这样我们的冒泡排序和优化后的就诞生了,有问题的可以私聊!

相关文章
|
3月前
|
搜索推荐 C语言
C语言冒泡排序(附源码和动态图)
冒泡排序是一种简单的排序算法,其基本思想是通过重复遍历待排序的数列,比较每对相邻元素的值,如果它们的顺序错误(即满足一定的排序条件,如从小到大排序时前一个元素大于后一个元素),就交换它们的位置。这个过程就像水底的气泡一样逐渐向上冒,因此得名“冒泡排序”。
|
4月前
|
机器学习/深度学习 搜索推荐 程序员
C语言实现个人通讯录(功能优化)-2
C语言实现个人通讯录(功能优化)
C语言实现个人通讯录(功能优化)-2
|
4月前
|
存储 C语言 索引
C语言实现个人通讯录(功能优化)-1
C语言实现个人通讯录(功能优化)
C语言实现个人通讯录(功能优化)-1
|
3月前
|
存储 编译器 定位技术
结构体数组在C语言中的应用与优化策略
结构体数组在C语言中的应用与优化策略
|
3月前
|
存储 编译器 数据库
结构体数组在C语言中的应用与优化技巧
结构体数组在C语言中的应用与优化技巧
|
4月前
|
算法 搜索推荐 C语言
C语言冒泡排序介绍
C语言冒泡排序介绍
|
4月前
|
C语言
C语言----冒泡排序
C语言----冒泡排序
|
5月前
|
存储 C语言
C语言初阶④(数组)知识点+编程作业(三子棋,冒泡排序)(下)
C语言初阶④(数组)知识点+编程作业(三子棋,冒泡排序)
35 1
|
4月前
|
搜索推荐 前端开发 C语言
C语言探索:冒泡排序的实现与解读
C语言探索:冒泡排序的实现与解读
60 0
|
5月前
|
算法 C语言 C++
C语言进阶:冒泡排序函数初步实现
C语言进阶:冒泡排序函数初步实现
43 0