1.冒泡排序
冒泡排序其实就是一种交换排序,依次将元素进行比较,最大/最小的元素放在数组的末尾/开头。
平均时间复杂度:n+n-1+n-2+n-3...+1 = 0(n²)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-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)