码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 二分查找和冒泡排序


    目录

     写一个函数,实现一个整形有序数组的二分查找

     写一个函数,实现一个冒泡排序

    因为之前掌握不牢的原因,将二分查找和冒泡排序进行了混淆,总结一下,作为提醒和警戒。 

     写一个函数,实现一个整形有序数组的二分查找

    先想好函数怎么用,再去写函数   !!!!

    去哪里查,查什么,数组有几个元素,找到了怎么办

    假设有一个数组int arr[ ] = { 0,1,2,3,4,5,6,7,8,9};

    查 k=7 这个数,数组中有sz个元素

    约定;
        找到了返回下标
        找不到返回-1
     

    图解:

    代码如下:

    1. #include <stdio.h>
    2. int binary_search(int arr[], int k, int sz)
    3. {
    4. int left = 0;
    5. int right = sz - 1;
    6. while (left <= right)
    7. {
    8. int mid = left + (right - left) / 2;
    9. if (k > arr[mid])
    10. {
    11. left = mid + 1;
    12. }
    13. else if (k < arr[mid])
    14. {
    15. right = mid - 1;
    16. }
    17. else
    18. {
    19. return mid;
    20. }
    21. }
    22. return -1;
    23. }
    24. int main()
    25. {
    26. int arr[] = { 0,1,2,3,4,5,6,7,8,9 };
    27. int sz = sizeof(arr) / sizeof(arr[0]);
    28. int k = 7;
    29. int ret = binary_search(arr, k, sz);
    30. if (ret == -1)
    31. {
    32. printf("找不到\n");
    33. }
    34. else
    35. {
    36. printf("找到了,下标是%d\n",ret);
    37. }
    38. return 0;
    39. }

     

      下面这个代码也是正确的,但我们一般不在函数中直接打印数据。因为函数的功能要尽量足够单一,高内聚低耦合

    1. #include <stdio.h>
    2. void binary_search(int arr[], int k,int sz)
    3. {
    4. int left = 0;
    5. int right = sz - 1;
    6. while (left<=right)
    7. {
    8. int mid = left + (right - left) / 2;
    9. if (k > arr[mid])
    10. {
    11. left = mid + 1;
    12. }
    13. else if (k < arr[mid])
    14. {
    15. right = mid - 1;
    16. }
    17. else
    18. {
    19. printf("找到了,下标是%d\n", mid);
    20. break;
    21. }
    22. }
    23. if (left > right)
    24. {
    25. printf("找不到\n");
    26. }
    27. }
    28. int main()
    29. {
    30. int arr[] = { 0,1,2,3,4,5,6,7,8,9 };
    31. int k = 7;
    32. int sz = sizeof(arr) / sizeof(arr[0]);
    33. binary_search(arr,k,sz);
    34. return 0;
    35. }

     写一个函数,实现一个冒泡排序

    冒泡排序的核心思想:

    两个相邻的元素进行比较 ,如果比较出来的大小不满足我们需要的顺序,就进行交换,来调整顺序。

    假设有一个数组int arr[ ] = { 9,8,7,6,5,4,3,2,1,0 };

    用冒泡排序的算法将数组中的元素排成升序并打印出来:

     解题思路:

    一趟冒泡排序让一个数据来到它最终应该出现的位置上!
    那么如果数组中有sz个元素,则需要sz-1趟冒泡排序
    第1趟冒泡排序需要sz-1-0次两两相邻比较
    第2趟冒泡排序需要sz-1-1次两两相邻比较

    第3趟冒泡排序需要sz-1-2次两两相邻比较

     代码和运行结果:

    1. #include <stdio.h>
    2. //冒泡排序
    3. void bubble_sort(int arr[],int sz)
    4. {
    5. //趟数
    6. int i = 0;
    7. for (i = 0; i < sz - 1; i++)
    8. {
    9. //一趟冒泡排序
    10. int j = 0;
    11. for (j = 0; j < sz - 1 - i; j++)
    12. {
    13. //两两相邻比较
    14. if (arr[j] > arr[j + 1])
    15. {
    16. //交换
    17. int tmp = arr[j];
    18. arr[j] = arr[j + 1];
    19. arr[j + 1] = tmp;
    20. }
    21. }
    22. }
    23. }
    24. int main()
    25. {
    26. int arr[] = { 9,8,7,6,5,4,3,2,1,0 };
    27. int sz = sizeof(arr) / sizeof(arr[0]);
    28. bubble_sort(arr,sz);
    29. int i = 0;
    30. for (i = 0; i < sz; i++)
    31. {
    32. printf("%d ",arr[i]);
    33. }
    34. return 0;
    35. }

     

     

  • 相关阅读:
    【深度学习】图像分类数据集Fashion-MNIST
    django+drf+vue 简单系统搭建 (4) 用户权限
    【历史上的今天】8 月 12 日:IBM 首款个人计算机问世;Tumblr 被收购
    Python数据分析实战-将dataframe某列的值分成不同区间并计算每个区间的频数(附源码和实现效果)
    关于晋升与跳槽的一些思考
    持有NPDP和PMP证书的伙伴们有福了!深圳的同学看过来
    MySQL查询为啥慢了?
    如何套用模板制作大屏?
    5-FITC,5-FITC(isomer I),5-异硫氰酸荧光素,5-Flourescein iso-thiocyanate
    VS Code 调试Js代码,无法命中断点
  • 原文地址:https://blog.csdn.net/m0_61731585/article/details/125557867
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号