加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

JS数据结构与算法_排序和搜索算法

发布时间:2019-03-29 23:35:28 所属栏目:建站 来源:同梦奇缘
导读:写在前面 这是《学习JavaScript数据结构与算法》的最后一篇博客,也是在面试中常常会被问到的一部分内容:排序和搜索。在这篇博客之前,我每每看到排序头就是大的,心里想着类似冒泡排序,两层遍历啪啪啪就完事了,然后再也无心去深入研究排序相关的问题了

代码:

  1. function insertionSort(arr) {  
  2.   const len = arr.length;  
  3.   let current, pointer;  
  4.   for (let i = 1; i < len; i += 1) {  
  5.     current = arr[i];  
  6.     pointer = i;  
  7.     while(pointer >= 0 && current < arr[pointer - 1]) { // 每次向前比较  
  8.       arr[pointer] = arr[pointer - 1]; // 前一项大于指针项,则向前移动一项  
  9.       pointer -= 1;  
  10.     }  
  11.     arr[pointer] = current; // 指针项还原成当前项  
  12.   }  
  13.   return arr;  

2.4 归并排序

归并排序和快速排序相较于上面三种排序算法在实际中更具有可行性(在第四小节我们会通过实践复杂度来比较这几种排序算法)

JavaScript的Array类定义了一个sort函数(Array.prototype.sort)用以排序JavaScript数组。ECMAScript没有定义用哪个排序算法,所以浏览器厂商可以自行去实现算法。例如,Mozilla Firefox使用归并排序作为Array.prototype.sort的实现,而Chrome使用了一个快速排序的变体

归并排序是一种分治算法。其思想是将原始数组切分成较小的数组,直到每个小数组只有一 个位置,接着将小数组归并成较大的数组,直到最后只有一个排序完毕的大数组。因此需要用到递归

核心:归并排序,拆分成左右两块数组,分别排序后合并

注意:递归中最小的左右数组比较为单个元素的数组,因此在较上层多个元素对比时,左右两个数组一定是顺序的

代码:

  1. function mergeSort(arr) {  
  2.   const len = arr.length;  
  3.   if (len < 2) return arr; // 递归的终止条件  
  4.   const middle = Math.floor(len / 2); // 拆分左右数组  
  5.   const left = arr.slice(0, middle);  
  6.   const right = arr.slice(middle);  
  7.   return merge(mergeSort(left), mergeSort(right));  
  8. }  
  9. function merge(left, right) { // 将左右两侧比较后进行合并  
  10.   const ret = [];  
  11.   while (left.length && right.length) {  
  12.     if (left[0] > right[0]) {  
  13.       ret.push(right.shift());  
  14.     } else {  
  15.       ret.push(left.shift());  
  16.     }  
  17.   }  
  18.   while (left.length) {  
  19.     ret.push(left.shift());  
  20.   }  
  21.   while (right.length) {  
  22.     ret.push(right.shift());  
  23.   }  
  24.   return ret;  

2.5 快速排序

快速排序也许是最常用的排序算法了。它的复杂度为O(nlogn),,且它的性能通常比其他的复 杂度为O(nlogn)的排序算法要好。和归并排序一样,快速排序也使用分治的方法,将原始数组分为较小的数组

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读