2

版权声明:本文为博主原创文章,未经博主允许不得转载。

javascript 选择排序、插入排序

选择排序

选择排序的基本思想:选择排序是一种相对来说比较简单的排序算法,基本思路是从数组的第一个元素开始,比较第一个元素的和其他元素的大小,然后把最小的一个元素和第一个元素交换,然后再进行的第二次排序,从第二个元素开始,比较第二个元素和其他元素的大小,再把第二个元素,和之后的元素进行比较,同理把最小的一个元素放在第二个元素的位置,以此类推,一直到数组的倒数第二个元素,到此为止,排序完毕,下面是引用的一张百度的图片,个将选择排序表达的比较清楚。

图片描述

附上具体的代码实现(javascript数据结构与算法):

/**
** 数据元素交换
**/

function swap(arr, t1, t2){
    let temp = arr[t1];
    arr[t1] = arr[t2];
    arr[t2] = temp;
}

function selectSort(arr) {
    var minIndex;
    for(var i=0;i<arr.length;i++){
        minIndex = i;
        for(var j=i+1;j<arr.length; j++) {
            if(arr[j] < arr[i]){
                minIndex = j;
            }
            swap(arr, i, minIndex);
        }
    }
}

时间复杂度

O(n^2)

插入排序

插入排序基本思想: 通俗一点,比如在我们在斗地主的时候,开始摸到的牌都是乱的,然后我们按照一定的顺序整理扑克牌,就是根据牌的大小插入到合适的位置,下面引用一个图片,用来说明插入排序的算法:
图片描述

图片详解:
(1) 首先对于第一个元素53,我们保持不动;
(2)下面我们看27这个元素,我们要做的是把27这个元素和前面的元素比较,27<53,所以27和53交换位置;
(3)36和前面的元素比较: 36<53,所以36和53交换位置,再将36和和前面的元素比较,36>23 所以36就应该插入再27和53之间;
以此类推,直到最后一个元素插入到合适的位置,该数组排序完毕;
代码实现:

function insertionSort(arr) {
    var temp, inner;
    for (var outer = 1; outer <= arr.length - 1; ++outer) {
        temp = arr[outer];
        inner = outer;
        while (inner > 0 && (arr[inner - 1] >= temp)) {
            arr[inner] = arr[inner - 1];
            --inner;
        }
    arr[inner] = temp;
}
}

时间复杂度

  1. 最坏的情况下: 数组完全逆序[5,4,3,2,1] 这种情况下时间复杂度为O(n^2);
  2. 最好的情况下: 数组是按顺序排列的[1,2,3,4,5],这种情况下的时间复杂度为O(n)。

多隆
34 声望7 粉丝

把努力当成一种习惯,而不是一腔热血