欢迎光临
我们一直在努力

基础算法冒泡排序(超详细讲解)

前言:

你曾经是否对算法代码感到无从下手?复杂的逻辑和抽象的概念很容易让初学者陷入“听不懂,学不会”的困境中。这并非你自身的问题,而是讲解方法可能忽略了初学者的真实需求。本文将完全站在初学者视角,用最直白的语言和最细致的步骤,带你剖析算法的核心逻辑。

冒泡排序的含义:1.算法会重复地从头部到尾部扫描整个待排序的数列  

                             2.比较相邻两数,进行交换(升序小数在前)(倒序大数在前)

第一步:创建一个一维数组 给数组初始值并且是乱序  这里[]中不写数编译器会自动根据你提供的数据个数自动计算数组大小(这种写法是 C 语言的一种便利机制。编译器会自动统计大括号 {} 里的数字个数,然后以此确定数组的大小。)

第二步:计算数组有多少元素 用sizeof计算 这里是int类型数组 注意:sizeof在main函数中使用方有效

sizeof(arr)意思是计算arr这个数组整个元素中多少个字节 这里有10个元素  40个字节

sizeof(arr[0])是计算其中一个元素的字节是多少  这里是4个字节

sizeof(数组名) / sizeof(数组元素类型)得出元素

sizeof(arr)/sizeof(arr[0])  这里是10个元素 返回值用sz接收且是int类型

第三步:写出一个函数将数据传入bubble_sort这个函数  传入数组arr 和元素个数sz(如果不传sz 就不知道有多少元素)

实参

 

形参

传入后形参接收  要知道传入的是什么类型所以要加int

数组传参本质是首元素地址 或写成 int*arr

int sz 直接传入 

这个函数不返回任何值 所以是void

第四步:也就是最为核心的步骤冒泡排序是相邻两数比较大效 这里以升序为例 两数比较小数在前 

大数在后 那么要比较多少次 箭头代表已经进行交换的数

……… 一共进行交换了8次(执行9次) 因为最后一次10已经在它该在的位置。

要用到for循环 

进行完算一趟 那有多少趟呢 9趟

为什么要跑9趟呢?
第1趟跑完,最后1个数(第10个)已经确定是最大的了,不用再管。
第2趟跑完,倒数第2个数(第9个)也排好了。

到了最后,只要前面的9个数都排好了,剩下的那1个数自然就在它正确的位置上了。
所以,10个数只需要排 10 – 1 = 9 趟。

函数bubble_sort中第一个for循环对应 9趟

函数bubble_sort中第二个for循环 一趟进行执行9次 进行一趟少一次sz-i-1 末尾就多了一个排好序的数(已经归位)已经在该在的位置  不必再进行重复  所以缩小范围

函数bubble_sort中第一个for循环中 i++进行计数 趟数:进行完一趟就会少一趟

发现前数大于后数 这里是进行两数交换 

最后用for循环打印已经排序好的数

结果:

看着那一串乱序的数字,在你的代码指挥下变得井井有条,这种成就感是不是很棒?

那么升序会了,是不是倒序也易如反掌?其实只需要修改一个小小的符号,就能让排序方向完全反转。回到核心的比较逻辑,把大于号(>)改成小于号(<),原本“小数往前跑”的逻辑就会变成“大数往前跑”,排序结果自然就倒过来了。试着改一改,运行看看,你会发现掌握算法逻辑后,调整排序方向就是这么简单!

赞(0)
未经允许不得转载:171主机测评 » 基础算法冒泡排序(超详细讲解)
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址