参考文章【十大经典排序算法(动图演示)】
算法复杂度

冒泡排序
1.1 动图演示

1.2 代码实现

function bubbleSort(arr) {
   
    var len = arr.length;
    for(var i = 0; i < len - 1; i++) {
   
        for(var j = 0; j < len - 1 - i; j++) {
   
            if(arr[j] > arr[j+1]) {
          // 相邻元素两两对比
                var temp = arr[j+1];       // 元素交换
                arr[j+1] = arr[j];
                arr[j] = temp;
            }
        }
    }
    return arr;
}

选择排序
2.1 排序原理
首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。
2.2 动图演示

2.3 代码实现

function selectionSort(arr) {
   
    var len = arr.length;
    var minIndex, temp;
    for(var i = 0; i < len - 1; i++) {
   
        minIndex = i;
        for(var j = i + 1; j < len; j++) {
   
            if(arr[j] < arr[minIndex]) {
       // 寻找最小的数
                minIndex = j;                // 将最小数的索引保存
            }
        }
        temp = arr[i];
        arr[i] = arr[minIndex];
        arr[minIndex] = temp;
    }
    return arr;
} 

插入排序
3.1 工作原理
通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入
3.2 动图演示

3.3 代码实现

function insertionSort(arr) {
   
    var len = arr.length;
    var preIndex, current;
    for(var i = 1; i < len; i++) {
   
        preIndex = i - 1;
        current = arr[i];
        while(preIndex >= 0 && arr[preIndex] > current) {
   
            arr[preIndex + 1] = arr[preIndex];
            preIndex--;
        }
        arr[preIndex + 1] = current;
    }
    return arr;
}

快速排序
参考文章:快速排序(过程图解)
4.1 工作原理
通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序
4.2 动图演示

4.3 代码实现

function quickSort(arr, left, right) {
   
    var len = arr.length,
        partitionIndex,
        left =typeof left !='number'? 0 : left,
        right =typeof right !='number'? len - 1 : right;
 
    if(left < right) {
   
        partitionIndex = partition(arr, left, right);
        quickSort(arr, left, partitionIndex-1);
        quickSort(arr, partitionIndex+1, right);
    }
    return arr;
}
 
function partition(arr, left ,right) {
       // 分区操作
    var pivot = left,                     // 设定基准值(pivot)
        index = pivot + 1;
    for(var i = index; i <= right; i++) {
   
        if(arr[i] < arr[pivot]) {
   
            swap(arr, i, index);
            index++;
        }       
    }
    swap(arr, pivot, index - 1);
    return index-1;
}
 
function swap(arr, i, j) {
   
    var temp = arr[i];
    arr[i] = arr[j];
    arr[j] = temp;
}