常用排序算法之JavaScript实现


常用排序算法之JavaScript实现

文章插图

笔试面试经常涉及各种算法,本文简要介绍常用的一些算法,并用JAVAScript实现 。
1、插入排序
1)算法简介插入排序(Insertion-Sort)的算法描述是一种简单直观的排序算法 。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入 。插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间 。2)算法描述和实现一般来说,插入排序都采用in-place在数组上实现 。具体算法描述如下:
  • 从第一个元素开始,该元素可以认为已经被排序;
  • 取出下一个元素,在已经排序的元素序列中从后向前扫描;
  • 如果该元素(已排序)大于新元素,将该元素移到下一位置;
  • 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置;
  • 将新元素插入到该位置后;
  • 重复步骤2~5 。
  • JavaScript代码实现:
  • functioninsertionSort(array){ if(Object.prototype.toString.call(array).slice(8, -1) === 'Array'){ for(vari = 1;i < array.length;i++){ varkey = array[i]; varj = i - 1; while(j >= 0 && array[j] > key){ array[j + 1] = array[j]; j--; } array[j + 1] = key; } returnarray; }else{ return'array is not an Array!'; }}

  • 3)算法分析
  • 最佳情况:输入数组按升序排列 。T(n) = O(n)
  • 最坏情况:输入数组按降序排列 。T(n) = O(n2)
  • 【常用排序算法之JavaScript实现】平均情况:T(n) = O(n2)
二、二分插入排序
1)算法简介二分插入(Binary-insert-sort)排序是一种在直接插入排序算法上进行小改动的排序算法 。其与直接插入排序算法最大的区别在于查找插入位置时使用的是二分查找的方式,在速度上有一定提升 。2)算法描述和实现一般来说,插入排序都采用in-place在数组上实现 。具体算法描述如下:
  • 从第一个元素开始,该元素可以认为已经被排序;
  • 取出下一个元素,在已经排序的元素序列中二分查找到第一个比它大的数的位置;
  • 将新元素插入到该位置后;
  • 重复上述两步 。
  • JavaScript代码实现:
  • functionbinaryInsertionSort(array){ if(Object.prototype.toString.call(array).slice(8, -1) === 'Array'){ for(vari = 1;i < array.length;i++){ varkey = array[i],left = 0,right = i - 1; while(left <= right){ varmiddle = parseInt((left + right) / 2); if(key < array[middle]){ right = middle - 1; }else{ left = middle + 1; } } for(varj = i - 1;j >= left;j--){ array[j + 1] = array[j]; } array[left] = key; } returnarray; }else{ return'array is not an Array!'; }}

  • 3)算法分析
  • 最佳情况:T(n) = O(nlogn)
  • 最差情况:T(n) = O(n2)
  • 平均情况:T(n) = O(n2)
三、选择排序
1)算法简介选择排序(Selection-sort)是一种简单直观的排序算法 。它的工作原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾 。以此类推,直到所有元素均排序完毕 。2)算法描述和实现n个记录的直接选择排序可经过n-1趟直接选择排序得到有序结果 。具体算法描述如下: