简单的排序算法

448 阅读1分钟

1.冒泡排序

冒泡排序是从排序序列的第一项开始,比较相邻的元素,如果第一个比第二个元素大,则交换他们两个的位置,直到末尾,此时最大值位于最后一位。针对除末尾的元素意外重复以上操作。

1.1 个人理解什么是冒泡排序

从数组第一个元素开始,以数组相邻的值做比较,如果第一个比第二个元素大的时候交换两个值的位置,直到最后一位。再从第一位开始,重复相同的步骤。

未命名文件 (6).png

1.2 实现代码

/**
 * 冒泡排序
 * @param arr 待排序的数组
 */
function bubbleSort(arr) {
    let max;
    for (let i = 0; i < arr.length - 1; i++) {
        for (let j = 0; j < arr.length - 1 - i; j++) {
            max = arr[j];
            if (max > arr[j + 1]) {
                arr[j] = arr[j + 1];
                arr[j + 1] = max;
            }
        }
    }
    return arr;
}

console.log(bubbleSort([1,3,4,2,5,8,5,6,4,7,9,14,10]))

2. 插入排序

插入排序是将待排序序列的第一个元素看做一个有序序列,把第二个元素到最后一个元素当成是未排序序列。 从头到尾依次扫描未排序序列,将扫描到的每个元素插入有序序列的适当位置。

2.1 个人理解什么是插入排序

将数组的第一项认为是已经排好的数组,从第二项开始,再依次往前查找比对,如果前一个比现在的大就交换位置,否则停止查找比对。

未命名文件 (7).png

未命名文件 (8).png

未命名文件 (9).png

未命名文件 (10).png

2.2 实现代码

/**
 * 插入排序
 * @param arr 带排序的数组
 * @return {array}
 */
function insertSort(arr) {
    let currentValue;
    let preIndex;
    for (let i = 1; i < arr.length; i++) {
        currentValue = arr[i];
        preIndex = i - 1;
        while (preIndex >= 0 && currentValue < arr[preIndex]) {
            arr[preIndex + 1] = arr[preIndex];
            preIndex--;
        }
        arr[preIndex + 1] = currentValue;
    }
    return arr;
}

console.log(insertSort([1,3,4,2,5,8,5,6,4,7,9,14,10]))

3. 什么是选择排序

选择排序是将未排序序列中的最大值(最小值)存放至排序序列中的起始位置,再从余下的排序序列中找到最小值放入已经排序序列的末尾。以此类推,直至所有元素排序完毕。

3.1 个人理解什么是选择排序

先从数组中找到最大值(最小值)放在数组的第一位,然后再从第二位开始找最大值(最小值)放在第二位,以此反复直至排序完成。

3.2 实现代码

/**
 * 选择排序
 * @param arr 带排序的数组
 */
function selectSort(arr) {
    let min;
    let minIndex;
    for (let i = 0; i < arr.length; i++) {
        min = arr[i];
        minIndex = i;
        for (let j = i + 1; j < arr.length; j++) {
            if (min > arr[j]) {
                min = arr[j];
                minIndex = j;
            }
        }
        arr[minIndex] = arr[i];
        arr[i] = min;
    }
    return arr;
}

console.log(selectSort([1,3,4,2,5,8,5,6,4,7,9,14,10]))