关于二分查找与冒泡排序

简介: 关于二分查找与冒泡排序

一.关于二分查找

①二分查找的两种不同的代码实现

二分查找:在有序数组中将数组筛选的范围不断进行缩减,从而达到提高效率和查找到有效数据的目的

第一种:

public static int binarySearch1(int[]arr,int num){

   //设置初始指向

   int left=0;

   int right=arr.length-1;

   while(left<=right){

       int mid=((right-left)>>1)+left;

       if(num>arr[mid]){

           left=mid+1;

       }

       else if(num<arr[mid]){

           right=mid-1;

       }

       else

           return mid;

   }

   return -1;

}

322a6023becc4079b7d9b91776936244.png

左边闭合和右边闭合的含义是:左右两侧边界都在数组筛选范围内

所以在这种情况下,循环的范围变化如下:left=mid+1;right=mid-1

条件是:left<=right(因为相等时恰好存在一个元素)

第二种:

//实现二分查找2

public static int binarySearch2(int[]arr,int num){

   //设置初始值

   int left=0;

   int right=arr.length;

   while (left<right){

       int mid=((right-left)>>1)+left;

       if (arr[mid]<num){

           left=mid+1;

       }

       else if(arr[mid]>num){

           right=mid;

       }

       else return mid;

   }

   return -1;

}


左边闭合,右边开,意味着右边所指向的元素并不包括

那么循环范围随着发生变化 right=mid(因为右边所指向的元素并不包括);left=mid+1

循环的条件:left<right(因为相等时由于右边并不包括,这时实际并不存在元素,如果是left<=right,两个相等时则会导致数组越界)

③另外关于mid 的取法:(((right-mid)>>1)+left)

图示如下:

f2b6e20cbf9648aeb44f73ef1c6127ad.png

左边闭合,右边开,意味着右边所指向的元素并不包括

那么循环范围随着发生变化 right=mid(因为右边所指向的元素并不包括);left=mid+1

循环的条件:left<right(因为相等时由于右边并不包括,这时实际并不存在元素,如果是left<=right,两个相等时则会导致数组越界)

③另外关于mid 的取法:(((right-mid)>>1)+left)

图示如下:



118655ba0964423385b45f4fac68b773.png

这样定义mid的好处是:如果mid=(left+right)/2存在导致栈溢出的可能性

相比之下,这样能够有效避免栈溢出,同时,用移位操作符代替/,能提高一点点效率

二.冒泡排序的优化

public static void swap(int[]arr,int m,int n){

       int temp=arr[m];

       arr[m]=arr[n];

       arr[n]=temp;

   }

   public static void bubbleSort(int[]arr){

       boolean flag=false;

       for (int i=0;i<arr.length-1;++i){

           for (int j = 0; j < arr.length-1-i; j++) {

               if (arr[j]>arr[j+1]){

                  swap(arr,j,j+1);

                  flag=true;

               }


           }

           if(flag==false)

               return;

           flag=false;

       }

   }

}

优化部分是加粗标红的部分,思路如下:因为考虑到冒泡循环实际上是不断比较两个相邻的元素达到排序数组元素的目的,而每次内层循环都能排好一个元素,而当内层循环的一次循换中如果发现在本次循换中没有发现两个需要交换的元素的时候,则可以说明此时实际上数组已经排好序了,不需要进行下一步的交换,直接return


所以设置一个flag的Boolean类型的标志符,能提高一些效率


相关文章
|
16天前
|
存储 弹性计算 人工智能
【2025云栖精华内容】 打造持续领先,全球覆盖的澎湃算力底座——通用计算产品发布与行业实践专场回顾
2025年9月24日,阿里云弹性计算团队多位产品、技术专家及服务器团队技术专家共同在【2025云栖大会】现场带来了《通用计算产品发布与行业实践》的专场论坛,本论坛聚焦弹性计算多款通用算力产品发布。同时,ECS云服务器安全能力、资源售卖模式、计算AI助手等用户体验关键环节也宣布升级,让用云更简单、更智能。海尔三翼鸟云服务负责人刘建锋先生作为特邀嘉宾,莅临现场分享了关于阿里云ECS g9i推动AIoT平台的场景落地实践。
【2025云栖精华内容】 打造持续领先,全球覆盖的澎湃算力底座——通用计算产品发布与行业实践专场回顾
|
8天前
|
云安全 人工智能 安全
Dify平台集成阿里云AI安全护栏,构建AI Runtime安全防线
阿里云 AI 安全护栏加入Dify平台,打造可信赖的 AI
|
11天前
|
人工智能 运维 Java
Spring AI Alibaba Admin 开源!以数据为中心的 Agent 开发平台
Spring AI Alibaba Admin 正式发布!一站式实现 Prompt 管理、动态热更新、评测集构建、自动化评估与全链路可观测,助力企业高效构建可信赖的 AI Agent 应用。开源共建,现已上线!
1032 34
|
10天前
|
机器学习/深度学习 人工智能 搜索推荐
万字长文深度解析最新Deep Research技术:前沿架构、核心技术与未来展望
近期发生了什么自 2025 年 2 月 OpenAI 正式发布Deep Research以来,深度研究/深度搜索(Deep Research / Deep Search)正在成为信息检索与知识工作的全新范式:系统以多步推理驱动大规模联网检索、跨源证据。
795 55
|
8天前
|
文字识别 测试技术 开发者
Qwen3-VL新成员 2B、32B来啦!更适合开发者体质
Qwen3-VL家族重磅推出2B与32B双版本,轻量高效与超强推理兼备,一模型通吃多模态与纯文本任务!
678 11
下一篇
开通oss服务