刚好今晚看了 JS 的冒泡排序跟快速排序, 趁着还没忘记先记下来.
1. 冒泡排序: 遍历数组, 每个元素都与后一个元素比较, 如果大于下一个元素, 则两个元素位置调换. 否则的话当前元素再与下下个元素比较, 一直到 跟后面的元素都比较完. 这个是升序的排序, 降序则相反.
- var arr = [1,23,4,12,32,455,122,3,43,13];
- function bubbleSort(arr) {
- for (let i = 0; i <arr.length - 1; i++) {
- for(let j = i + 1; j < arr.length; j++) {
- if (arr[i]> arr[j]) {
- let maxVal = arr[i];
- arr[i] = arr[j];
- arr[j] = maxVal;
- }
- }
- }
- return arr;
- }
- console.log('bubble sort:', bubbleSort(arr));
2. 快速排序: 是对冒泡排序的一种改进.
先从数组里面选出一个数, 一般都是第一个数即 array[0], 然后再将其他数据分成两个数组, 小于 array[0] 的放在左边数组, 大于的放在右边数组.
对两个数组进行递归排序 (按照 1 步骤), 直到数组长度 <= 1, 跳出递归 (这个是主要条件, 不然会陷入死循环).
将数据 concat 成一个最终的数组. 这个是升序的排序, 降序则相反.
- var arr = [1,23,4,12,32,455,122,3,43,13];
- function quickSort(arr) {
- if (arr.length <= 1) {
- // 注意加这个条件, 不然死循环
- return arr;
- }
- var reference = arr[0];
- var leftList = [];
- var rightList = [];
- arr.forEach(item => {
- if (item> reference) {
- rightList.push(item);
- } else if (item < reference) {
- leftList.push(item);
- }
- })
- return quickSort(leftList).concat(reference, quickSort(rightList));
- }
- console.log('quick sort:' , quickSort(arr))
来源: http://www.bubuko.com/infodetail-2996617.html