JSFiddle - React, Tailwind, and code Playground

by Paul Lan

HTML

<h2>源数据</h2>

<li>[0, 8, 9, 2, 5, 7, 6, 1, 4]</li>

<h2>维基百科上的冒泡</h2>

<a href="http://zh.wikipedia.org/wiki/%E5%86%92%E6%B3%A1%E6%8E%92%E5%BA%8F">点击查看</a>

<li>结果:<span id="result1"></span>
</li>
<li>循环次数:<span id="iteration1"></span>
</li>
<li>排序次数:<span id="count1"></span>
</li>

<h2>小方初步改进的冒泡</h2>

<li>结果:<span id="result2"></span>
</li>
<li>循环次数:<span id="iteration2"></span>
</li>
<li>排序次数:<span id="count2"></span>
</li>

JavaScript

var arr1 = [0, 8, 9, 2, 5, 7, 6, 1, 4, 20, 100, 3, 55, 1003];
var arr2 = arr1.concat([]);

function bubbleSort(arr) {
    var iteration = 0;
    var count = 0;
    var i = arr.length,
        j;
    var tempExchangVal;
    while (i > 0) {
        for (j = 0; j < i - 1; j++) {
            iteration++;
            if (arr[j] > arr[j + 1]) {
                count++;

                tempExchangVal = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = tempExchangVal;
            }
        }
        i--;
    }
    return [arr, iteration, count];
}

var r1 = bubbleSort(arr1);

function xfBubbleSort(a) {
    var iteration = 0;
    var count = 0;
    var i = 0;
    var j;
    var tmpE;
    var lookBack;
    for (; i < a.length; i++) {
        for (j = i; j < a.length; j++) {
            iteration++;
            if (a[j] > a[j + 1]) {
                if (lookBack) {
                   lookBack = false; 
                }
                count++;

                tmpE = a[j + 1];
                a[j + 1] = a[j];
                a[j] = tmpE;
                if (j > 0) {
                    j = j - 2;
                    lookBack = true;
                };

            } else {
                if (lookBack) {
                    j = j + 2;
                };
                break;
            }
        }
    }
    return [a, iteration, count];
}

var r2 = xfBubbleSort(arr2);

$('#result1').html(r1[0].join(', '));
$('#iteration1').html(r1[1]);
$('#count1').html(r1[2]);

$('#result2').html(r2[0].join(', '));
$('#iteration2').html(r2[1]);
$('#count2').html(r2[2]);