二分查找必须有序怎么办?排序算法来帮忙(冒泡排序)

简介: 冒泡排序的基本思想


冒泡排序可以让一个无序数组变成有序数组的一种算法思想,也是最简单的一种排序思想,但是在我们初学C语言时,会遇到一些大大小小的问题,那接下来就请跟着我的思想来一起理解冒泡排序:

本篇文章将把冒泡排序封装成一个独立的函数来进行讲解:

我们定义一个函数应该知道这个函数要接收几个值,所接收值应该是什么类型,所返回类型是什么?因为我们冒泡排序函数只是排序用,所以返回值用void,在来到接收值,我们引用函数是给函数递过来两个值,一个数组一个元素个数,所以我们这里也要放两个形参来接受,第一个是数组,与数组类型一致,第二个元素个数,这里可能会有人有疑问,为什么不能在函数内部把元素个数算出来,毕竟我们已经把数组传过来了,这里是一个很容易错的地方,数组在传参时,只会把数组首元素的地址传过去,所以函数里面的数组实际上只有一个元素,这样要是在到函数里面算元素个数就会和实际元素个数不一样,导致我们这个函数实现不了预期的作用,现在我们就把函数的接收和返回类型订好了那冒泡排序具体是怎么将无序数组变成有序数组呢?其实不是很复杂,我们上面定义了一个变量,是用来计算要跑的趟数的,那这个趟数是多少呢?我们要知道冒泡排序实际是什么才能得到答案,冒泡排序实际上是从第一个数开始和每个数比大小然后根据是要排升序还是降序来决定要不要换位置,那既然是换位置,只剩一个元素的时候是不是就没有这个换位置的必要了,那是不是我们只用元素个数减一趟就可以将这个数组排序完成了,那我们这么实现跑这么多趟呢?这里用循环语句,如果当我们跑的趟数少于这些应该跑的趟数时,进入循环,然后跑完这趟后加一,继续进行下一个循环:

image.png

 那进入循环之后我们要这么让这个元素一趟一趟和他右或左元素对比呢?是不是就需要嵌套另一个循环语句来实现,那这个时候,我们每个元素要比多少次大小才合适呢?每次跑完一趟都会有一个元素确定位置,这个时候我们是不是就没必要和他比了,那我们每个元素是不是只需要比趟数减去跑的第几趟就行:
image.png

那接下来都是不是就到了我们比大小环节,那比了大小,我们怎么去换这个元素的位置呢?这个时候就需要一个变量(姑且叫他tihuan),我们把原来的元素(姑且叫1)放到tihuan里面去,那1现在里面就空了,在把2里面的元素放1的里面,在把放在tihuan里面的元素放到2的位置,那这个换位置就好了:
image.png

 那到现在整个函数就写完了,我们让代码跑起来运行一下:

image.png

 看,我们是不是成功了。

那以上就是我对于冒泡查找整个算法的逻辑上的一个见解,希望对大家有所帮助。

源码:

#include<stdio.h>

void maopao_paixu(int arr[], int sz)
{
    int j = 0;
    int  i= 0;
    for (j = 0; j < sz - 1; j++)
    {
        for (i = 0; i < sz - 1 - j; i++)
        {
            if (arr[i] > arr[i + 1])
            {
                int tihuan = arr[i];
                arr[i] = arr[i + 1];
                arr[i + 1] = tihuan;
            }
        }
    }

}

int main()
{
    int arr[] = { 90,38,34,27,162,487,293 };
    int sz = sizeof(arr) / sizeof(arr[0]);
    int i = 0;
    maopao_paixu(arr, sz);
    for (i = 0; i < sz; i++)
    {
        printf("%d ", arr[i]);
    }
    return 0;
}

相关文章
|
6月前
|
存储 算法 搜索推荐
软考算法破壁战:从二分查找到堆排序,九大排序核心速通指南
专攻软考高频算法,深度解析二分查找、堆排序、快速排序核心技巧,对比九大排序算法,配套动画与真题,7天掌握45%分值模块。
287 1
软考算法破壁战:从二分查找到堆排序,九大排序核心速通指南
|
8月前
|
搜索推荐 算法 Go
Go语言数组排序(冒泡排序法)—— 用最直观的方式掌握排序算法
本案例介绍使用冒泡排序对整数数组进行升序排序的实现方法,涵盖输入处理、错误检查与排序逻辑。通过代码演示和算法解析,帮助理解排序原理及Go语言切片操作,为学习更复杂排序算法打下基础。
|
8月前
|
搜索推荐
冒泡排序与其它排序算法比较
本内容比较了冒泡排序、选择排序和插入排序的特性。三者时间复杂度均为O(n²),但交换次数和稳定性不同。冒泡排序稳定,交换次数多,可优化至O(n);选择排序不稳定,交换次数少;插入排序交换次数最少,且二者均为稳定排序。对于有序数组,冒泡和插入可优化提升效率。
166 0
|
存储 算法
【❤️算法笔记❤️】-每日一刷-21、合并两个有序链表
【❤️算法笔记❤️】-每日一刷-21、合并两个有序链表
363 0
|
算法 Java 索引
算法系列之搜素算法-二分查找
二分查找是一种在`有序`数组中查找特定元素的算法。它的基本思想是通过将数组分成两半,逐步缩小查找范围,直到找到目标元素或确定目标元素不存在。
225 9
算法系列之搜素算法-二分查找
|
搜索推荐 Python
利用Python内置函数实现的冒泡排序算法
在上述代码中,`bubble_sort` 函数接受一个列表 `arr` 作为输入。通过两层循环,外层循环控制排序的轮数,内层循环用于比较相邻的元素并进行交换。如果前一个元素大于后一个元素,就将它们交换位置。
324 67
|
算法 索引
【算法】——二分查找合集
二分查找基础模版和进阶模版,查找元素位置,搜索插入位置,x的平方根,山脉数组的峰顶索引,寻找峰值,点名
|
搜索推荐
冒泡排序算法
【10月更文挑战第19天】冒泡排序是一种基础的排序算法,虽然在实际应用中可能不是最优的选择,但对于理解排序算法的基本原理和过程具有重要意义。
|
搜索推荐 算法 数据可视化
深入解析冒泡排序算法
深入解析冒泡排序算法
278 5
|
算法 C# 索引
C#二分查找算法
C#二分查找算法
191 1

热门文章

最新文章