冒泡排序: 最小时间复杂度n,最差复杂度为 n^2,使用两层循环实现,依次将数组里的每个元素,与其他元素比较,只要大于当前正在比的元素就交换两者
代码实现:
function bubble(arr){ let len = arr.length; for(; len >= 0;len-- ){ let sorted = true; for( let j = 0; j < len ; j++ ){ if( arr[j] > arr[j + 1] ) swap(j,j+1,arr)//这个方法的实现详见快排一章下同 sorted= false; } if( sorted ) break; } return arr; }
选择排序:稳定,时间复杂度无论如何都是o(n^2), 具体实现过程是每趟排序将最小元素冒泡到已经有序的序列后边;
代码实现:
function selectSort(arr){ let len = arr.length; for(let i = 0; i < len;i++){ let min= i; for( let j = i + 1; j < len;j++ ){ if( arr[min] > arr[j] ){ min = j; } } swap( i,min,arr ) } return arr; }
冒泡排序的过程和选择排序的过程看起来好像是恰好相反的两个过程,每一趟冒泡之后,最大元素一定被交换到了数组的最后位置,而选择排序每一趟总是把剩余未排序中最小的元素给提了出来,周而复始。
这两个算法都是初级算法,都是稳定算法,以上