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实现》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 算法之常见排序算法-冒泡排序、归并排序、快速排序
- 排序算法之冒泡排序改进算法
- 快速排序算法,C语言快速排序算法深入剖析
- 排序算法下——桶排序、计数排序和基数排序
- 数据结构和算法面试题系列—排序算法之快速排序
- 数据结构和算法面试题系列—排序算法之基础排序
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Building Web Reputation Systems
Randy Farmer、Bryce Glass / Yahoo Press / 2010 / GBP 31.99
What do Amazon's product reviews, eBay's feedback score system, Slashdot's Karma System, and Xbox Live's Achievements have in common? They're all examples of successful reputation systems that enable ......一起来看看 《Building Web Reputation Systems》 这本书的介绍吧!