1.冒泡排序

冒泡排序其实就是一种交换排序,依次将元素进行比较,最大/最小的元素放在数组的末尾/开头。
 
function bubble(arr) {   if(arr==null||arr.length<2){ return null  } for(let j = arr.length-1;j>=0;j--){ for(var i = 0;i<j;i++){ if(arr[i]>arr[i+1]){ var temp = arr[i];
                  arr[i] = arr[i+1]
                  arr[i+1] = temp;
            }
        }
    } return arr;
}

平均时间复杂度:n+n-1+n-2+n-3...+1 = 0(n²)
最好情况下:升序排列的情况下,只需要比较n-1次,所以最好的情况下时间复杂度为:O(1)
最坏情况:完全逆序,每次比较一次就需要交换一次。0(n²)
空间复杂度:不需要申请额外空间:O(1)

2.简单选择排序:

    //简单选择排序 每次从序列中选出最大/最小的元素,放在开头/末尾,再从剩下的n-1的元素中在选择最小/最大,依次重复。
    function straight(arr){
        if(arr==null||arr.length<2){return null}
        for(let i =0;i<arr.length;i++){
            for(let j=i+1;j<arr.length;j++){
                if(arr[j]<arr[i]){
                    var temp = arr[j];
                    arr[j] = arr[i]
                    arr[i] = temp;
                }
            }
        }
        return arr;
    } 
平均时间复杂度:0(n²)
最好情况和最坏情况都是O(n²)
空间复杂度;O(1)
3.直接插入排序
function insert(arr) { if(arr==null||arr.length<2){return null}
for(var i =0;i<arr.length;i++) { for (var j = i - 1; j >= 0 && arr[j] > arr[j + 1]; j--) { var temp = arr[j];
        arr[j] = arr[j + 1];
        arr[j + 1] = temp;
    } return arr;
}
}

平均时间复杂度:O(n²)
最好情况:O(n)
最坏:O(n²)
空间复杂度:O(1)