const arr = [44, 92, 82, 48, 2, 51]; /********* 1、冒泡排序 **********/ // 很常见很容易理解的 排序 算法, 排序思路:遍历数组,每次遍历就将最大(或最小)值推至最前。越往后遍历查询次数越少 const bubbleSort = arr => { const list = arr.slice(); //保证函数为纯函数 const len = list.length; for (let i = 0; i < len; i++) { for (let j = len - 1; j > i; j--) { if (list[j] < list[j - 1]) { const tmp = list[j - 1]; list[j - 1] = list[j]; list[j] = tmp; } } } return list; } /********* 2、改进版冒泡排序 **********/ // 对上述冒泡排序的一种优化, 优化思路:当一次遍历前后数组不产生变化时,说明该数组已经有序,结束排序。 const bubbleSort2 = arr => { const list = arr.slice(); //保证函数为纯函数 const len = list.length; for (let i = 0; i < len; i++) { let exchange = false; for (let j = len - 1; j > i; j--) { if (list[j] < list[j - 1]) { const tmp = list[j - 1]; list[j - 1] = list[j]; list[j] = tmp; exchange = true; } } if (!exchange) return list } return list; } /********* 3、选择排序 **********/ // 在无序区中选出最小的元素,然后将它和无序区的第一个元素交换位置。 const selectionSort = arr => { const list = arr.slice(); //保证函数为纯函数 const len = list.length; for (let i = 0; i < len; i++) { let k = i for (let j = len - 1; j > i; j--) { if (list[j] < list[k]) k = j; } if (k !== i) { const tmp = list[k]; list[k] = list[i]; list[i] = tmp; } } return list; } /********* 4、插入排序 **********/ // 最普通的排序算法, 从数组下标1开始每增1项排序一次,越往后遍历次数越多; const insertSort = arr => { const list = arr.slice(); //保证函数为纯函数 const len = list.length; for (let i = 1; i < len; i++) { const tmp = list[i]; let j = i - 1; while (j >= 0 && tmp < list[j]) { list[j + 1] = list[j]; j--; } list[j + 1] = tmp; } return list; } /********* 5、快速排序 **********/ function quickSort(arr) { const list = arr.slice(); //为了保证这个函数是纯函数,拷贝一次数组 if (list.length <= 1) return list; const pivot = list.splice(0, 1)[0]; //选第一个作为基数 const left = []; const right = []; for (let i = 0, len = list.length; i < len; i++) { if (list[i] < pivot) { left.push(list[i]); } else { right.push(list[i]); } } return quickSort(left).concat([pivot], quickSort(right)) } 复制代码
2、效果图
3、解答
- 如何在控制台打印出上面图片中的效果,eg:
const logStep = (i, leftArr, rightArr) => console.log(`%c 第${i}趟排序:%c ${arrStr(leftArr)} %c${arrStr(rightArr)} `, 'color:green', 'color:red', 'color:blue');
复制代码
- 所有源码github地址: github.com/laifeipeng/…
- 彩色打印效果的github地址: github.com/laifeipeng/…
以上所述就是小编给大家介绍的《九种排序算法的js实现》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Spring Into HTML and CSS
Molly E. Holzschlag / Addison-Wesley Professional / 2005-5-2 / USD 34.99
The fastest route to true HTML/CSS mastery! Need to build a web site? Or update one? Or just create some effective new web content? Maybe you just need to update your skills, do the job better. Welco......一起来看看 《Spring Into HTML and CSS》 这本书的介绍吧!