網(wǎng)站開發(fā)有哪些方式網(wǎng)站設(shè)計培訓(xùn)成都
鶴壁市浩天電氣有限公司
2026/01/24 10:51:08
網(wǎng)站開發(fā)有哪些方式,網(wǎng)站設(shè)計培訓(xùn)成都,徐州住房和城鄉(xiāng)建設(shè)部網(wǎng)站,wordpress 樹形插件冒泡排序#xff08;Bubble Sort#xff09;詳解
冒泡排序是一種基礎(chǔ)的交換排序算法#xff0c;核心思想是#xff1a;重復(fù)遍歷待排序數(shù)組#xff0c;每次比較相鄰的兩個元素#xff0c;若順序錯誤則交換它們#xff0c;直到?jīng)]有元素需要交換為止。
資料#xff1a;h…冒泡排序Bubble Sort詳解冒泡排序是一種基礎(chǔ)的交換排序算法核心思想是重復(fù)遍歷待排序數(shù)組每次比較相鄰的兩個元素若順序錯誤則交換它們直到?jīng)]有元素需要交換為止。資料https://pan.quark.cn/s/43d906ddfa1b、https://pan.quark.cn/s/90ad8fba8347、https://pan.quark.cn/s/d9d72152d3cf核心特點穩(wěn)定性穩(wěn)定相等元素的相對位置不變時間復(fù)雜度最好情況已排序O(n)需優(yōu)化標志位最壞情況逆序O(n2)平均情況O(n2)空間復(fù)雜度O(1)原地排序適用場景小規(guī)模數(shù)據(jù)、對穩(wěn)定性有要求的簡單場景算法原理從數(shù)組第一個元素開始依次比較相鄰的兩個元素如arr[i]和arr[i1]若arr[i] arr[i1]升序則交換兩者位置一輪遍歷結(jié)束后最大的元素會“冒泡”到數(shù)組末尾重復(fù)上述過程每輪遍歷的終點向前收縮一位已排序的末尾元素無需再比較若某一輪遍歷中沒有發(fā)生任何交換說明數(shù)組已完全有序可提前終止優(yōu)化。代碼實現(xiàn)Pythondefbubble_sort(arr):# 復(fù)制數(shù)組避免修改原數(shù)據(jù)arr_copyarr.copy()nlen(arr_copy)# 外層循環(huán)控制遍歷輪數(shù)最多n-1輪foriinrange(n-1):# 標志位標記本輪是否發(fā)生交換優(yōu)化swappedFalse# 內(nèi)層循環(huán)每輪比較到未排序的最后一位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# 若本輪無交換說明數(shù)組已有序提前退出ifnotswapped:breakreturnarr_copy# 測試示例if__name____main__:# 無序數(shù)組unsorted_arr[64,34,25,12,22,11,90]sorted_arrbubble_sort(unsorted_arr)print(原始數(shù)組,unsorted_arr)print(排序后數(shù)組,sorted_arr)# 輸出[11, 12, 22, 25, 34, 64, 90]# 已排序數(shù)組驗證優(yōu)化sorted_test[1,2,3,4,5]print(bubble_sort(sorted_test))# 僅1輪遍歷即退出代碼實現(xiàn)JavapublicclassBubbleSort{publicstaticint[]bubbleSort(int[]arr){// 復(fù)制數(shù)組避免修改原數(shù)據(jù)int[]arrCopyArrays.copyOf(arr,arr.length);intnarrCopy.length;for(inti0;in-1;i){booleanswappedfalse;// 交換標志位// 內(nèi)層循環(huán)每輪減少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(原始數(shù)組);for(intnum:unsortedArr)System.out.print(num );System.out.print(
排序后數(shù)組);for(intnum:sortedArr)System.out.print(num );}}關(guān)鍵優(yōu)化點提前終止通過swapped標志位若某輪無交換則直接退出避免無效遍歷收縮遍歷范圍每輪遍歷的終點為n-1-i因為后i個元素已排序完成雙向冒泡雞尾酒排序針對“部分有序”的數(shù)組如[1,3,2,4,5]可從左到右、再從右到左交替遍歷減少遍歷次數(shù)。適用場景數(shù)據(jù)量小n 1000對性能要求不高需保證排序穩(wěn)定性教學(xué)場景易理解、易實現(xiàn)。不適用場景大數(shù)據(jù)量如n 10000此時應(yīng)選擇快速排序、歸并排序等O(n log n)的算法。