氣泡排序的實現思路和優化方案

2021-10-09 06:19:51 字數 1749 閱讀 7061

優化外層迴圈的寫法

優化內層迴圈

寫在前面

今天寫乙個氣泡排序,當然網上氣泡排序已經寫爛了,那博主我能和他們一樣嗎?為什麼寫這個呢?因為面試的時候很多時候都會問,但是又要自己顯得和別人不一樣,所以今天我們寫的乙個優化的冒泡,提公升一下他的排序的效能。

基礎寫法
當然優化的前提是你的基礎寫法是對的才可以,所以我們寫乙個基本的氣泡排序

**(白嫖的圖)

源位址

基礎寫法**實現

function

_funmp

(_dataarr)}}

}else

console.

timeend()

return _dataarr

}

至於執行的結果你們自己去看吧!這裡就不貼了

優化外層迴圈的寫法

其實氣泡排序的乙個原理就是從陣列的第乙個開始和第二個比較,然後將大的值「冒」上去,其實就是用乙個第三方變數暫存,看基礎寫法也可以看得明白,那麼其實我們是可以直接將每一次的比較進行判斷,因為有的陣列是有很多的重複值的,那麼當遇到重複值的時候我們不進行比較,是不是可以提公升速度呢?所以第乙個效能優化的點就來了!記錄下來兩個值是不是需要比較,不需要比較的話直接跳出循序,預設的是需要比較的,外層的時候認為不需要比較,進去內層迴圈以後如果後乙個值小於前乙個值,那麼是不相等的,是需要比較的,這個時候重置標識!**如下:

外層迴圈優化**實現
function

_funmp

(_dataarr)

_ischange =

false

for(

let j =

0; j < arr.length; j++)}

}}else

console.

timeend()

return _dataarr

}

優化內層迴圈
我的想法是內層迴圈其實只能優化次數,首先我們知道js的雙層for迴圈的時候是外層走乙個,內層走一圈,那麼這個時候我們其實可以記錄外層當前的乙個臨界值,因為我們排序的話只要保證排過的是正確的順序就可以了,至於後面的是不是對的,我們不用關心,因為後面還會排到這裡其實就知道**怎麼寫了!

內層迴圈優化**實現
/**

* @function _funmp 氣泡排序

* @param _dataarr user提供的實參

* @ischange 標記是否發生互動,如果不互動,不進行比較,優化效能

* @_currlocal 記錄臨界值 將沒有必要排序的後續操作停止比較,比較當前值前面的所有值

*/function

_funmp

(_dataarr)

_ischange =

false

let _currindex =

0for

(let j =

0; j < _currlocal; j++)}

_currlocal = _currindex

}}else

console.

timeend()

return _dataarr

}

氣泡排序和優化 go實現

package main import fmt var arr int func bubblesort fmt.println arr 假設我們現在排序ar 這組資料,按照上面的排序方式,第一趟排序後將10和9交換已經有序,接下來的8趟排序就是多餘的,什麼也沒做。所以我們可以在 交換的地方加乙個標記...

冒泡演算法排序及其優化方案

一 什麼是氣泡排序?氣泡排序 bubble sort 是一種最為基礎的交換排序,相信學過c語言的,都接觸過這種排序演算法。這篇文章重點應該放在優化上面。二 氣泡排序的實現思想 將陣列裡面相鄰的元素兩兩比較,根據大小來交換元素位置,舉個栗子 這裡有乙個陣列array 4,6,5,8,9,3,2,1,7...

氣泡排序和優化

計算機中解決問題,一定要學會問題分解,先解決比這個容易解決的問題,再慢慢加深 比如 我要對陣列排序,那麼我能不能先求陣列的最小值,放在第乙個位置,這樣一來反覆執行這個操作,就能排序了 比如 我要求子陣列的排序,那麼我先解決整個陣列的排序,然後在改進 變成子陣列的排序 package day7yue1...