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

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

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

代码:

  1. function quickSort(arr, left = 0, right = arr.length - 1) {  
  2.   // left和right默认为数组首尾  
  3.   if (left < right) {  
  4.     let partitionpartitionIndex = partition(arr, left, right);  
  5.     quickSort(arr, left, partitionIndex - 1);  
  6.     quickSort(arr, partitionIndex + 1, right);  
  7.   }  
  8.   return arr;  
  9. }  
  10. function partition(arr, left, right) {  
  11.   let pivot = left;  
  12.   let index = left + 1; // 满足比较条件的依次放在分割点后  
  13.   for (let i = index; i <= right; i += 1) {  
  14.     if (arr[i] < arr[pivot]) {  
  15.       swap(arr, i, index);  
  16.       index += 1;  
  17.     }  
  18.   }  
  19.   swap(arr, index - 1, pivot); // 交换顺序时,以最后一位替换分隔项  
  20.   return index - 1;  

三、搜索算法

3.1 顺序搜索

顺序或线性搜索是最基本的搜索算法。它的机制是,将每一个数据结构中的元素和我们要找的元素做比较。顺序搜索是最低效的一种搜索算法。

  1. function findItem(item, arr) {  
  2.   for (let i = 0; i < arr.length; i += 1) {  
  3.     if (item === arr[i]) {  
  4.       return i;  
  5.     }  
  6.   }  
  7.   return -1;  

3.2 二分搜索

二分搜索要求被搜索的数据结构已排序。以下是该算法遵循的步骤:

  1.     选择数组的中间值
  2.     如果选中值是待搜索值,那么算法执行完毕
  3.     如果待搜索值比选中值要小,则返回步骤1在选中值左边的子数组中寻找
  4.     如果待搜索值比选中值要大,则返回步骤1在选中值右边的子数组中寻找 
  1. function binarySearch(item, arr) {  
  2.   arr = quickSort(arr); // 排序  
  3.   let low = 0;  
  4.   let high = arr.length - 1;  
  5.   let mid;  
  6.   while (low <= high) {  
  7.     min = Math.floor((low + high) / 2);  
  8.     if (arr[mid] < item) {  
  9.       low = mid + 1;  
  10.     } else if (arr[mid] > item) {  
  11.       high = mid - 1;  
  12.     } else {  
  13.       return mid;  
  14.     }  
  15.   }  
  16.   return -1;  

四、算法复杂度

4.1 理解大O表示法

(编辑:核心网)

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

热点阅读