2026/1/20 12:30:53
网站建设
项目流程
wordpress 到小程序,百度ocpc怎么优化,wordpress默认文章内添加,网站优化主要工作有那些内容冒泡排序#xff08;Bubble Sort#xff09;详解
冒泡排序是一种基础的交换排序算法#xff0c;核心思想是#xff1a;重复遍历待排序数组#xff0c;每次比较相邻的两个元素#xff0c;若顺序错误则交换它们#xff0c;直到没有元素需要交换为止。
资料#xff1a;h…冒泡排序Bubble Sort详解冒泡排序是一种基础的交换排序算法核心思想是重复遍历待排序数组每次比较相邻的两个元素若顺序错误则交换它们直到没有元素需要交换为止。资料https://pan.quark.cn/s/43d906ddfa1b、https://pan.quark.cn/s/90ad8fba8347、https://pan.quark.cn/s/d9d72152d3cf核心特点稳定性稳定相等元素的相对位置不变时间复杂度最好情况已排序O(n)需优化标志位最坏情况逆序O(n²)平均情况O(n²)空间复杂度O(1)原地排序适用场景小规模数据、对稳定性有要求的简单场景算法原理从数组第一个元素开始依次比较相邻的两个元素如arr[i]和arr[i1]若arr[i] arr[i1]升序则交换两者位置一轮遍历结束后最大的元素会“冒泡”到数组末尾重复上述过程每轮遍历的终点向前收缩一位已排序的末尾元素无需再比较若某一轮遍历中没有发生任何交换说明数组已完全有序可提前终止优化。代码实现Pythondefbubble_sort(arr):# 复制数组避免修改原数据arr_copyarr.copy()nlen(arr_copy)# 外层循环控制遍历轮数最多n-1轮foriinrange(n-1):# 标志位标记本轮是否发生交换优化swappedFalse# 内层循环每轮比较到未排序的最后一位n-1-iforjinrange(n-1-i):# 升序前一个元素大于后一个则交换ifarr_copy[j]arr_copy[j1]:arr_copy[j],arr_copy[j1]arr_copy[j1],arr_copy[j]swappedTrue# 若本轮无交换说明数组已有序提前退出ifnotswapped:breakreturnarr_copy# 测试示例if__name____main__:# 无序数组unsorted_arr[64,34,25,12,22,11,90]sorted_arrbubble_sort(unsorted_arr)print(原始数组,unsorted_arr)print(排序后数组,sorted_arr)# 输出[11, 12, 22, 25, 34, 64, 90]# 已排序数组验证优化sorted_test[1,2,3,4,5]print(bubble_sort(sorted_test))# 仅1轮遍历即退出代码实现JavapublicclassBubbleSort{publicstaticint[]bubbleSort(int[]arr){// 复制数组避免修改原数据int[]arrCopyArrays.copyOf(arr,arr.length);intnarrCopy.length;for(inti0;in-1;i){booleanswappedfalse;// 交换标志位// 内层循环每轮减少i次比较末尾i个已排序for(intj0;jn-1-i;j){if(arrCopy[j]arrCopy[j1]){// 交换元素inttemparrCopy[j];arrCopy[j]arrCopy[j1];arrCopy[j1]temp;swappedtrue;}}// 无交换则提前终止if(!swapped){break;}}returnarrCopy;}publicstaticvoidmain(String[]args){int[]unsortedArr{64,34,25,12,22,11,90};int[]sortedArrbubbleSort(unsortedArr);System.out.print(原始数组);for(intnum:unsortedArr)System.out.print(num );System.out.print(\n排序后数组);for(intnum:sortedArr)System.out.print(num );}}关键优化点提前终止通过swapped标志位若某轮无交换则直接退出避免无效遍历收缩遍历范围每轮遍历的终点为n-1-i因为后i个元素已排序完成双向冒泡鸡尾酒排序针对“部分有序”的数组如[1,3,2,4,5]可从左到右、再从右到左交替遍历减少遍历次数。适用场景数据量小n 1000对性能要求不高需保证排序稳定性教学场景易理解、易实现。不适用场景大数据量如n 10000此时应选择快速排序、归并排序等O(n log n)的算法。