1. 程式人生 > 其它 >JS排序--氣泡排序(實現及優化)

JS排序--氣泡排序(實現及優化)

技術標籤:JS資料結構js排序演算法

首先我們用JS實現氣泡排序的話,最常見的應該是這種。

基礎版:

    <script>
        function sort(arr) {
            for (var i = 0; i < arr.length - 1; i++) {
                for (var j = 0; j < arr.length - i - 1; j++) {
                    if (arr[j] > arr[j + 1]) {
                        var
temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } console.log(arr); } return arr; } let arr = [9, 8, 7, 6, 5, 4, 3, 2, 1]; sort(arr);

由於是最常見的排序方法,所以不說實現過程了。

優化一:

現在我們來看一組數:
let arr = [1, 2, 3, 4, 5, 6, 7, 9, 8];

其實在這個排序中,第一趟排序已經完成排序了,但是他還要繼續之後的7趟。
也就是說後面的7趟都是做的無用功。
那我們可不可以用一個flag來判斷,如果排序已經完成,那麼我就不進行後面的無用排序了。

<script>
        //第一種優化
        function sort(arr) {
            for (var i = 0; i < arr.length - 1; i++) {
                var flag = 0;
                for
(var j = 0; j < arr.length - i - 1; j++) { if (arr[j] > arr[j + 1]) { var temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; flag = 1; } } //如果不交換元素,說明已經排序完成,可以跳出迴圈了。 if (flag == 0) { break; } console.log('第一趟->' + arr); } } let arr = [1, 2, 3, 4, 5, 6, 7, 9, 8]; sort(arr); </script>

我們可以看一下列印結果:
在這裡插入圖片描述
也就是說外層迴圈只執行了一次。
不會執行後面的7次無用迴圈。

優化二:

現在我們再看另一組數
let arr = [6, 5, 4, 3, 2, 1, 7, 8, 9]

在這裡面我們進行冒泡的時候,會發現後面的789並沒有動。
那我們你可以記錄7這個位置,每次冒泡到7這個位置就不繼續下去,也會少了一些操作。

 <script>
        //第二種優化
        function sort(arr) {
            for (var i = 0; i < arr.length - 1; i++) {
                var k = arr.length - i - 1;
                //pos有兩個功能,第一個功能是優化1中的功能,第二個是記錄最後交換的位置,下次交換到這個位置就可以了。
                var pos = -1;
                for (var j = 0; j < k; j++) {
                    if (arr[j] > arr[j + 1]) {
                        var temp = arr[j];
                        arr[j] = arr[j + 1];
                        arr[j + 1] = temp;
                        pos = j;
                    }
                }
                k = pos;
                if (pos == -1) {
                    break;
                }
                console.log(arr);
            }
        }

        let arr = [6, 5, 4, 3, 2, 1, 7, 8, 9];
        sort(arr);
    </script>

OK,這就是冒泡的兩個優化。