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实现》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
大思维:集体智慧如何改变我们的世界
杰夫·摩根 / 郭莉玲、尹玮琦、徐强 / 中信出版集团股份有限公司 / 2018-8-1 / CNY 65.00
智能时代,我们如何与机器互联,利用技术来让我们变得更聪明?为什么智能技术不会自动导致智能结果呢?线上线下群体如何协作?社会、政府或管理系统如何解决复杂的问题?本书从哲学、计算机科学和生物学等领域收集见解,揭示了如何引导组织和社会充分利用人脑和数字技术进行大规模思考,从而提高整个集体的智力水平,以解决我们时代的巨大挑战。是英国社会创新之父的洞见之作,解析企业、群体、社会如何明智决策、协作进化。一起来看看 《大思维:集体智慧如何改变我们的世界》 这本书的介绍吧!