日常学习日记——从练习代码中学习

日常学习日记——从练习代码中学习

    • 一、题目展示
    • 二、代码展示
    • 三、问题剖析
    • 四、冒泡排序
      • 4.1阐述
      • 4.2优缺点
      • 4.3逻辑阐述

初学者记录不易,还请多多哦点赞支持呀!!
也请各位大佬慷慨对我的问题提出指正
如果对我的阐述有些疑问或者觉得博主写的不对,评论下来。主播觉得有道理一定会一一改正!!

一、题目展示

日常学习日记——从练习代码中学习_第1张图片

二、代码展示

#include
#define  MAX  1000
int main()
{
    int n,m=0;
    scanf("%d%d",&n, &m);
    if(n>=1 && n<=1000 && m>=1 && m<=1000)
    {
        int  arr1[MAX] ,arr2  [MAX],  arr3[MAX*2] ;
        for(int i=0;i<n;i++ )     //输入第一组数据
        {
            scanf("%d",&arr1[i]);
        }
        for(int i=0;i<m;i++)  //输入第二组数据
        {
            scanf("%d",&arr2[i]);
        }
        for(int i=0;i<n;i++)   //将两组数据融合在同一个数组中,再进行冒泡排序以达到效果
        {
            arr3[i]=arr1[i];
        }
        for(int i=n;i<m+n;i++)   //将两组数据融合在同一个数组中,再进行冒泡排序以达到效果
        {
            arr3[i]=arr2[i-n];
        }
        //冒泡排序
        for(int i=0;i<m+n-1;i++)
        {
            for(int  j=0;j<m+n-i-1;j++)
            {
                if(arr3[j]>arr3[j+1])
                {
                    int temp=arr3[j];
                    arr3[j]=arr3[j+1];
                    arr3[j+1]=temp;
                }
            }
        }
        for(int i=0;i<m+n;i++)
        {
            printf("%d ",arr3[i]);
        }

    }
    else {
    printf("输入错误,请重新输入\n");
    }
    return 0;
}

三、问题剖析

1.输入n,m
2.应用for循环和scanf函数输入n,m的数据
3.将两个数组组装在一个数组内
4.进行冒泡排序
5.打印出来

四、冒泡排序

4.1阐述

这里仅对我这个初学者的对冒泡排序的简单梳理记录

冒泡排序是一种常见的C语言排序方式,因为它的排序原理是将每次排序中的一个最大或者最小数排在最后面达到升序或者降序排列的方式。这种方式类似于水泡从水底慢慢浮起到水面而得名为冒泡排序。

4.2优缺点


逻辑简单,写法单一,可以迅速得到想要的结果


时间复杂度较高,对于大规模数据排序效率较低。
比较和交换操作频繁,效率不高。

4.3逻辑阐述

每次排序就是相邻两个数据之间进行比大小,如果前面比后面大,就将两组数据之间进行调换。但是!!请大家想一想,进行了第一次排序之后是不是这组数据中最大的数据就已经到了数组的末尾。那下一次排序还需要对它排序吗??

显然不用,所以我们一共如果有n个数据只需要进行n-1次排序

又因为每进行一次就少一个数据进行比较所以就多减去进行排序的次数

你可能感兴趣的:(学习,c语言,笔记)