1、冒泡排序法
原理:从第一个元素开始,往后比较,遇到比自己小的元素就交换位置
特点:交换的次数最多,所以它的性能是最差的
let arr1 = [5,3,6,7,1,2,9,0,8,10]; let method1 = function(arr) { let len = arr.length; for(let i = 0; i < len -1; i++) { for(let j = 0; j < len - 1 - i; j++ ) { if(arr[j] > arr[j + 1]) { let temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } } return arr; } console.time('method1的消耗的时间为'); method1(arr1); console.timeEnd('method1的消耗的时间为'); console.log(arr1); //输出 //method1的消耗的时间为: 0.140869140625ms //[0, 1, 2, 3, 5, 6, 7, 8, 9, 10]
2、插入排序法
插入排序的工作原理:通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。
let arr2 = [5,3,6,7,1,2,9,0,8,10]; const method2 = function(arr) { for (let i = 1; i < arr.length; i++) { let pre = i - 1 let tmp = arr[i] while (pre >= 0 && arr[pre] > tmp) { //如果前面的数字比后面的大 arr[pre + 1] = arr[pre] //那么把后面项改成较大的那位数 pre--; //在前面的基础上减1,比如第0项,那么就是-1 } arr[pre+1] = temp; //再把第循环后的结果项赋值为当前项 } return arr } console.time('method2的消耗的时间为:') console.log(method2(arr2)); console.timeEnd('method2的消耗的时间为:') // 输出 // (10) [0, 1, 2, 3, 5, 6, 7, 8, 9, 10] // method2的消耗的时间为:: 0.461181640625ms