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

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


冒泡排序可以让一个无序数组变成有序数组的一种算法思想,也是最简单的一种排序思想,但是在我们初学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;
}

相关文章
|
2月前
|
搜索推荐 Python
利用Python内置函数实现的冒泡排序算法
在上述代码中,`bubble_sort` 函数接受一个列表 `arr` 作为输入。通过两层循环,外层循环控制排序的轮数,内层循环用于比较相邻的元素并进行交换。如果前一个元素大于后一个元素,就将它们交换位置。
140 67
|
3月前
|
存储 算法
【❤️算法笔记❤️】-每日一刷-21、合并两个有序链表
【❤️算法笔记❤️】-每日一刷-21、合并两个有序链表
117 0
|
10天前
|
算法 索引
【算法】——二分查找合集
二分查找基础模版和进阶模版,查找元素位置,搜索插入位置,x的平方根,山脉数组的峰顶索引,寻找峰值,点名
|
5月前
|
算法
【算法】二分查找——在排序数组中查找元素的第一个和最后一个位置
【算法】二分查找——在排序数组中查找元素的第一个和最后一个位置
|
3月前
|
搜索推荐
冒泡排序算法
【10月更文挑战第19天】冒泡排序是一种基础的排序算法,虽然在实际应用中可能不是最优的选择,但对于理解排序算法的基本原理和过程具有重要意义。
|
3月前
|
算法 C# 索引
C#二分查找算法
C#二分查找算法
|
3月前
|
算法 搜索推荐
数据结构与算法学习十一:冒泡排序、选择排序、插入排序
本文介绍了冒泡排序、选择排序和插入排序三种基础排序算法的原理、实现代码和测试结果。
25 0
数据结构与算法学习十一:冒泡排序、选择排序、插入排序
|
3月前
|
搜索推荐 算法 数据可视化
深入解析冒泡排序算法
深入解析冒泡排序算法
54 4
|
3月前
|
存储 算法 C语言
【C语言】二分查找算法
【C语言】二分查找算法
|
3月前
|
搜索推荐 C语言
排序算法--冒泡排序
排序算法--冒泡排序
24 0

热门文章

最新文章