当前位置: 首页 > wzjs >正文

安徽省卫生计生网站医共体建设提升wordpress访问速度

安徽省卫生计生网站医共体建设,提升wordpress访问速度,网页传奇平台,1.网站开发的详细流程介绍 冒泡排序(Bubble Sort)是一种简单直观的排序算法,其基本思想是:在待排序的一组数中,将相邻的两个数进行比较,若前面的数比后面的数大就交换两数,否则不交换;如此重复遍历下去&…

介绍

冒泡排序(Bubble Sort)是一种简单直观的排序算法,其基本思想是:在待排序的一组数中,将相邻的两个数进行比较,若前面的数比后面的数大就交换两数,否则不交换;如此重复遍历下去,直到没有再需要交换的元素,最终完成排序。由此可得,在排序过程中,大的数据往下沉,小的数据往上浮,就像水中气泡上升一样,于是将这种排序算法形象地称为冒泡排序。

算法步骤

  1. 比较相邻的元素。如果第一个比第二个大,就交换它们
  2. 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对
  3. 这步做完后,最后的元素会是最大的数
  4. 针对所有的元素重复以上的步骤,除了已经是最大数的最后一个
  5. 持续每次对越来越少(每次重复都会少一个最大数)的元素重复上面的步骤,直到没有任何一对数字需要比较

核心特性

  • 稳定性:冒泡排序是稳定的排序算法,相等元素的相对位置在排序后不会改变
  • 原地排序:只需要常数级的额外空间
  • 时间复杂度:最坏和平均情况为O(n²),最好情况为O(n)
  • 比较排序:基于元素间的比较进行排序

基础实现

接下来大家一起看下冒泡排序的几个主流语言实现:

代码实现

public class BubbleSort {public static void bubbleSort(int[] arr) {int n = arr.length;for (int i = 0; i < n - 1; i++) {for (int j = 0; j < n - i - 1; j++) {if (arr[j] > arr[j + 1]) {int temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;}}}}public static void printArray(int[] arr) {for (int i : arr) {System.out.print(i + " ");}System.out.println();}public static void main(String[] args) {int[] arr = {64, 34, 25, 12, 22, 11, 90};System.out.println("排序前的数组:");printArray(arr);bubbleSort(arr);System.out.println("排序后的数组:");printArray(arr);}
}

优化版本

如果是一个已经排好序的数组,上述代码也会循环执行,我们可以针对这一点进行如下优化:

public static void optimizedBubbleSort(int[] arr) {int n = arr.length;boolean swapped;for (int i = 0; i < n - 1; i++) {swapped = false;for (int j = 0; j < n - i - 1; j++) {if (arr[j] > arr[j + 1]) {int temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;swapped = true;}}if (!swapped) {break;}}
}

优缺点

优点

  • 代码简单,容易实现
  • 适合小规模数据排序
  • 对于几乎已经排好序的数据,效率较高
  • 稳定的排序算法

缺点

  • 时间复杂度高,为O(n²)
  • 随着元素数量增加,效率急剧下降
  • 每次只能将一个元素移动到其最终位置,效率不高

应用场景

由于效率问题,冒泡排序的应用场景比较少,不过也不是完全没有,比如:

  • 教学演示:简单直观,常用于算法入门教学
  • 小规模数据排序:当数据量较小、空间资源有限时可以使用
  • 对于接近有序的数组:有优化版本可以在接近有序的情况下提前终止
  • 嵌入式系统或资源受限环境:因为它不需要额外的内存空间

扩展

鸡尾酒排序(双向冒泡排序)

鸡尾酒排序是冒泡排序的一种变体,它从低到高然后从高到低来回排序,比冒泡排序的效率稍微高一点:

public static void cocktailSort(int[] arr) {boolean swapped = true;int start = 0;int end = arr.length - 1;while (swapped) {swapped = false;for (int i = start; i < end; i++) {if (arr[i] > arr[i + 1]) {int temp = arr[i];arr[i] = arr[i + 1];arr[i + 1] = temp;swapped = true;}}if (!swapped)break;swapped = false;end--;for (int i = end - 1; i >= start; i--) {if (arr[i] > arr[i + 1]) {int temp = arr[i];arr[i] = arr[i + 1];arr[i + 1] = temp;swapped = true;}}start++;}
}

测验

  1. 冒泡排序的平均时间复杂度是多少?
  2. 冒泡排序是稳定的排序算法吗?
  3. 对于已经排好序的数组,优化版冒泡排序的时间复杂度是多少?
  4. 冒泡排序每一轮遍历后,数组尾部会有什么特点?
  5. 如何优化冒泡排序以提高效率?

测验答案

  1. 冒泡排序的平均时间复杂度是O(n²)。
  2. 是的,冒泡排序是稳定的排序算法。因为只有当前一个元素大于后一个元素时才交换,相等元素不会改变相对位置。
  3. 对于已经排好序的数组,优化版冒泡排序的时间复杂度是O(n)。因为第一轮遍历不会发生交换,优化版会检测到这点并提前终止。
  4. 冒泡排序每一轮遍历后,数组尾部会有一个元素到达其最终位置,且是当前未排序部分中的最大元素。第i轮结束后,末尾i个元素已排好序。
  5. 优化冒泡排序的方法:
    • 添加标志位跟踪是否发生交换,无交换则提前终止
    • 记录最后一次交换位置,下一轮只遍历到该位置
    • 使用双向冒泡(鸡尾酒排序),同时将最大值上浮和最小值下沉

相关的 LeetCode 热门题目

下面给大家推荐一些可以用来练手的 LeetCode 题目:

  • 75. 颜色分类 - 可以使用冒泡排序解决,但有更优的解法
  • 283. 移动零 - 可以用冒泡排序的思想将零元素"冒泡"到数组末尾
  • 912. 排序数组 - 可以使用冒泡排序,但因为数据规模较大,可能会超时

需要注意的是,上述题目使用冒泡排序不一定是最优解,仅使用冒泡排序也可能无法解决问题,不过这些题目都能够直接或间接体现冒泡排序的核心思想,帮助大家熟悉这个算法。


文章转载自:

http://k12QQ0Y8.rfrnc.cn
http://dfzbizdZ.rfrnc.cn
http://ML6chHDn.rfrnc.cn
http://MXGxLwwv.rfrnc.cn
http://nfjQkE4V.rfrnc.cn
http://pXWpDCSa.rfrnc.cn
http://ybRpernI.rfrnc.cn
http://OW90dPpk.rfrnc.cn
http://xl9NRjb7.rfrnc.cn
http://FP0dZigj.rfrnc.cn
http://OSMj82ho.rfrnc.cn
http://4bTtABnO.rfrnc.cn
http://FjEYGpbM.rfrnc.cn
http://xjZY5YmM.rfrnc.cn
http://3mKdRfwP.rfrnc.cn
http://3Bxgquiq.rfrnc.cn
http://mueyFDIR.rfrnc.cn
http://JqoaKCHJ.rfrnc.cn
http://VRMtw9t0.rfrnc.cn
http://IV9ePUjj.rfrnc.cn
http://FRdFkAmK.rfrnc.cn
http://KXRZok0A.rfrnc.cn
http://9jbEQOiH.rfrnc.cn
http://hcaJbGee.rfrnc.cn
http://fWpuJtD6.rfrnc.cn
http://XF4vrJt2.rfrnc.cn
http://1s6bPe1x.rfrnc.cn
http://PkjyQLGV.rfrnc.cn
http://5G9Udvh3.rfrnc.cn
http://gmhQBZSp.rfrnc.cn
http://www.dtcms.com/wzjs/646890.html

相关文章:

  • 做网站的专业网站建设行业swot分析
  • 家电网站建设费用杭州经济技术开发区建设局网站
  • 建筑材料价格查询网站代理网络app
  • 企业所得税税率表2022年狼雨seo培训
  • 响应式布局网站模板国家再就业免费培训网
  • php做网站界面代码佛山营销网站建设联系方式
  • 公司想建个网站怎么弄网站建设365
  • 给网站添加后台包工头如何找工程项目
  • 网站logo上传小程序开发平台好牌子推荐
  • 苏州吴中区专业做网站南京做企业号微网站营销
  • 成都 做网站wordpress付费插件网站
  • 滕州市住房城乡建设局网站网站建设公司文案
  • 新乡网站建设专业熊掌网络上海网站建设工作室
  • 实木餐桌椅网站建设欧美风的网站设计
  • 服务器搭建网站步骤视频上海国际人才网
  • 网站建设服务公司哪家好常州免费企业网站建设
  • 成都品牌网站建设360广告联盟平台
  • 哪些网站可以做任务挣钱深圳企业信用网
  • 佛山智唯网站建设广告软文范例200字
  • 怎么把网站做10万ippython制作网页的基本步骤
  • 如何做财经网站团队拓展总结
  • 打开网上免费网站吗企业网站推广推广阶段
  • 网站图片最大尺寸小程序定制开发多少钱一个
  • 网站 导出链接百度app下载并安装
  • 做网站优化就是发文章吗国内永久免费crm不实名认证
  • 中职网站建设与维护考试题网站建设协议书怎么写
  • 建网站公司公司名称大全青山网站建设
  • 做数学题好的网站什么是网店推广
  • 苏州晶体公司网站建设做微网站要多少钱
  • 公司网站维护价格表2023怎么做网站赚钱的动漫网站