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

笔记本做网站服务器免费推广店铺的网站

笔记本做网站服务器,免费推广店铺的网站,装修网站建设方案,icodepython基础教程一、算法基础 1.1 什么是冒泡排序 冒泡排序是一种简单直观的比较排序算法。它重复地走访待排序的数列,依次比较相邻两个元素,如果顺序错误就交换它们,直到没有元素需要交换为止。 1.2 基本思想 比较相邻元素:从头开始&#xf…

一、算法基础

1.1 什么是冒泡排序

冒泡排序是一种简单直观的比较排序算法。它重复地走访待排序的数列,依次比较相邻两个元素,如果顺序错误就交换它们,直到没有元素需要交换为止。

1.2 基本思想

  • 比较相邻元素:从头开始,两两比较相邻元素
  • 交换位置:如果前一个元素大于后一个元素,则交换位置
  • 重复操作:每完成一次迭代,最大的元素会"冒泡"到数组末尾
  • 多次迭代:重复以上步骤,每次排除已排好序的末尾元素

1.3 时间复杂度

  • 最好情况:O(n),当数组已经排好序
  • 最坏情况:O(n²),当数组逆序排列
  • 平均情况:O(n²)

二、冒泡排序的分类

2.1 标准冒泡排序

标准版本每次将最大元素冒泡到末尾:

  • 外层循环:控制排序轮数,最多n-1轮
  • 内层循环:控制每轮比较次数,逐渐减少
  • 无优化:即使数组已排序仍会执行全部循环

2.2 优化冒泡排序

通过标记变量检测一轮比较中是否有交换发生:

  • 设置标记:初始假设本轮无交换
  • 发生交换:更新标记变量
  • 提前终止:若一轮比较无交换发生,则排序完成

三、冒泡排序实现

3.1 标准实现

public class BubbleSort {/*** 标准冒泡排序算法* @param arr 待排序数组*/public static void bubbleSort(int[] arr) {int n = arr.length;// 外层循环控制排序轮数for (int i = 0; i < n - 1; i++) {// 内层循环进行相邻元素比较和交换// 每轮结束后,最大的i+1个元素已经排好序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;}}}}
}

3.2 优化实现

public class OptimizedBubbleSort {/*** 优化版冒泡排序算法* @param arr 待排序数组*/public static void bubbleSort(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;}}}
}

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

public class CocktailSort {/*** 双向冒泡排序(鸡尾酒排序)算法* @param arr 待排序数组*/public static void cocktailSort(int[] arr) {int left = 0;int right = arr.length - 1;boolean swapped;while (left < right) {swapped = false;// 从左向右,将最大元素冒泡到右侧for (int i = left; i < right; 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;}right--; // 最大元素已经到位,缩小右边界swapped = false;// 从右向左,将最小元素冒泡到左侧for (int i = right; i > left; 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;}left++; // 最小元素已经到位,缩小左边界}}
}

四、算法分析与优化

4.1 理论推导

冒泡排序的工作原理可以用以下数学表达式描述:

  • 比较次数:(n-1) + (n-2) + ... + 1 = n(n-1)/2
  • 最大交换次数:同上 n(n-1)/2
  • 元素移动次数:最多3×n(n-1)/2(每次交换需要3次移动)

4.2 优化策略

  1. 提前终止优化:如前述,检测是否有交换发生
  2. 记录最后交换位置:每轮记录最后一次交换的位置,下一轮只需扫描到该位置即可
  3. 奇偶交替扫描:类似鸡尾酒排序,减少"乌龟"(小元素靠后)的情况
public class EnhancedBubbleSort {/*** 记录最后交换位置的优化冒泡排序* @param arr 待排序数组*/public static void bubbleSort(int[] arr) {int n = arr.length;int lastSwappedIndex = n - 1;int newLastSwappedIndex;while (lastSwappedIndex > 0) {newLastSwappedIndex = 0;for (int i = 0; i < lastSwappedIndex; i++) {if (arr[i] > arr[i + 1]) {// 交换元素int temp = arr[i];arr[i] = arr[i + 1];arr[i + 1] = temp;// 记录最后交换的位置newLastSwappedIndex = i;}}// 更新下一轮排序的终止位置lastSwappedIndex = newLastSwappedIndex;}}
}

五、完整示例程序

public class BubbleSortDemo {public static void main(String[] args) {// 测试数据int[] arr = {64, 34, 25, 12, 22, 11, 90};System.out.println("原始数组: ");printArray(arr);// 执行优化版冒泡排序optimizedBubbleSort(arr);System.out.println("\n排序后数组: ");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]) {swap(arr, j, j + 1);swapped = true;}}// 如果没有发生交换,数组已经有序if (!swapped) {System.out.println("提前结束于第 " + (i + 1) + " 轮");break;}}}/*** 交换数组中两个元素*/private static void swap(int[] arr, int i, int j) {int temp = arr[i];arr[i] = arr[j];arr[j] = temp;}/*** 打印数组*/private static void printArray(int[] arr) {for (int num : arr) {System.out.print(num + " ");}System.out.println();}
}

六、总结

冒泡排序是一种经典的排序算法,其特点如下:

6.1 优点

  • 实现简单:代码直观易懂,适合教学使用
  • 稳定性好:相等元素不会改变相对顺序
  • 原地排序:不需要额外空间
  • 自适应性:对于部分有序数据效率较高

6.2 缺点

  • 效率低下:平均时间复杂度为O(n²)
  • 比较次数多:即使数据已经有序,基本版本仍需大量比较

6.3 适用场景

  • 小规模数据:元素数量较少时表现尚可
  • 教学演示:算法思想简单直观
  • 接近有序数据:优化版本在这种情况下效率较高

冒泡排序虽然在大规模数据中效率不高,但其思想简单,实现容易,是学习排序算法的良好起点。在实际应用中,可根据数据特性选择更高效的排序算法,如快速排序、归并排序等。


文章转载自:

http://ovRg18cs.ysckr.cn
http://UqWrQcNb.ysckr.cn
http://bA3bFzdz.ysckr.cn
http://r24DdKUL.ysckr.cn
http://41gwJ12f.ysckr.cn
http://oV1eq0wQ.ysckr.cn
http://oTlZxA70.ysckr.cn
http://pawKB11E.ysckr.cn
http://NMlREvFn.ysckr.cn
http://GCkFPJSx.ysckr.cn
http://ZptcbSw3.ysckr.cn
http://odV5C45D.ysckr.cn
http://JI1VHIKy.ysckr.cn
http://dG2bJ6Uf.ysckr.cn
http://Z20OrsGf.ysckr.cn
http://X6EUqRtM.ysckr.cn
http://M9rfcMKu.ysckr.cn
http://88PfLJFH.ysckr.cn
http://LpJJGLIL.ysckr.cn
http://9pdkSzzD.ysckr.cn
http://aYblyNzx.ysckr.cn
http://skWcLWcV.ysckr.cn
http://r93upUBw.ysckr.cn
http://lVELcKJE.ysckr.cn
http://nwJz2OWY.ysckr.cn
http://1G3cPOeh.ysckr.cn
http://qNkTyZPX.ysckr.cn
http://z301ZgQZ.ysckr.cn
http://wGyYn6Ec.ysckr.cn
http://WFtpc6FK.ysckr.cn
http://www.dtcms.com/wzjs/705828.html

相关文章:

  • 如何做网站新手引导深圳市南山区住房和建设局网站
  • 河源网站搭建费用seo优化方案报价
  • 移动网站建设的基本流程图网站开发语言为 php
  • 芜湖市建设工程质量监督站网站短视频软件
  • 杭州网站关键词优化织梦网站模板陶瓷
  • app 微信 网站三合一厦门网站建设_
  • dz论坛中英文网站怎么做长春网络公司排名
  • 什么程序做网站收录好网页设计入门课程
  • 箱包东莞网站建设国外好的设计网站有哪些
  • 长春做网站seo的wordpress情侣网站源码
  • 自建网站模板代码企业融资渠道和融资方式有哪些
  • 兰州网站建设兼职seo网站推广软件排名
  • 做外贸网站要多少钱安徽搜索引擎优化
  • 网站是否开启gzip网络规划设计师是职业资格吗
  • 网站没备案怎么做广告联盟站点推广促销
  • 建设企业网站的需求分析wordpress投稿收费吗
  • 使用asp.net做购物网站手机移动网站建设
  • 北京手机版建站系统开发网站服务公司排名
  • 门户网站关键词如何提升网站用户体验
  • 湖南网站优化服务手机免费创网站
  • 实用网站开发北京 建公司网站要多少钱
  • 网站建设广州哪家好青岛vi设计公司
  • 北京品牌建设网站公司排名wordpress newsroom
  • 做微商有什么好的货源网站济宁竞价托管
  • 家具网站策划书设计logo网站赚钱
  • 南京做代账会计在哪个网站上找家政公司响应式网站建设案例
  • 网站开发前期准备门户网站设计说明
  • 万江做网站北京网络营销培训
  • 行业网站网址医疗网站建设渠道
  • wordpress入门建站教程二建筑方案设计流程步骤