• 二分查找和冒泡排序


    目录

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

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

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

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

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

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

    假设有一个数组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. }

     

     

  • 相关阅读:
    【开源】基于Vue.js的校园二手交易系统的设计和实现
    Visual Studio 2022 设置 PySide6 扩展工具
    [Vue3]自己封装Svg图标组件
    js vue 时分秒倒计时
    java并发编程:synchronized同步方法
    开源云原生分布式文件系统 - JuiceFS
    蓝牙耳机销量排行榜2022,性价比高实用的蓝牙耳机品牌
    程序员内功-设计模式篇
    一个有些意思的项目--文件夹对比工具(一)
    安卓依赖冲突问题
  • 原文地址:https://blog.csdn.net/m0_61731585/article/details/125557867