冒泡排序 let arr = [1, 2, 3, 4, 5, 7, 9, 10, 13, 18]; for (let i = 0; i < arr.length - 1; i++) { for (let j = 0; j < arr.length - i - 1; j++) { let tmp = arr[j]; if (tmp % 2 === 0 && arr[j + 1] % 2 !== 0) { arr[j] = arr[j + 1]; arr[j + 1] = tmp; } } } console.log('arr', arr);//[ 1, 3, 5, 7, 9, 13, 2, 4, 10, 18 ] 我一开始也以为sort会创建新数组,原来不会 let arr = [1, 2, 3, 4, 5, 7, 9, 10, 13, 18]; arr.sort((a, b) => { if (a % 2 === 0) { if (b % 2 !== 0) { return 1; } return 0; } else return -1 }) console.log('arr', arr);//[ 1, 3, 5, 7, 9, 13, 2, 4, 10, 18 ] 测试了一下sort是真的快,看样子以后不需要用原生的。Array.prototype.sort 排序算法
如果对奇数间的顺序,和偶数间的顺序不需要和原来保持一致的话,可以参考快排的思想
一个指针从左往右搜,一个指针从右往左搜,当左边找到偶数,右边找到奇数时,交换两个数,然后继续查找,直到两个指针相同
冒泡排序
我一开始也以为
sort
会创建新数组,原来不会测试了一下
sort
是真的快,看样子以后不需要用原生的。Array.prototype.sort 排序算法[1, 2, 3, 4, 5].sort(function(a, b){ / 里面就不写了 / })
arr.sort(a => a%2 === 0); 但这种是不稳定排序, 因为sort内部使用快排, 快排本身不稳定.
需要稳定排序的话就归并或者冒泡这些, 判断条件改一下即可