最近面试可能会问这些

1,插入排序

function sort(elements){
var res =[elements[0]];
for (var i = 0; i < elements.length; i++) {
one(res,elements[i]);
};
return res;
}
function one(arr,x){
var len = arr.length;
var temp = false;
for (var i = 0; i < len; i++) {
if(arr[i]>=x){
for (var j = len; j >i; j--) {
arr[j]=arr[j-1];
};
arr[i]=x;
temp = true;
break;
}
};
!temp&&arr.push(x);
return arr;
}

简单来说就是插入一个数,在结果里找他插入的位置。位置怎么找呢,比如我要插入一个值,看一下哪个值比它大,那就插入到这个比他大的值的前面。遍历一下数组,往后诺位置。

2.冒泡排序

function sort(arr){
for(var i=0;i<arr.length-1;i++){
for(var j=0;j<arr.length-i-1;j++){
if(arr[j]>arr[j+1]){
var swap=arr[j];
arr[j]=arr[j+1];
arr[j+1]=swap;
}
}
}
}

3.快速排序

元素交换快排,但是用swap多声明了一个临时变量tmp。

 function quickSort(arr, left = 0, right = arr.length - 1) {
if (left >= right) return;
var i = left;
var j = right;
var privot = arr[left];
while (i < j) {
if (privot > arr[j]) {
swap(arr, j, i);
i++;
} else {
j--;
}
}
if (arr[i] > privot) {
quickSort(arr, left, i-1);
quickSort(arr, i, right);
} else {
quickSort(arr, left, i);
quickSort(arr, i+1, right);
}
return arr;
}
function swap(arr, i, j) {
var tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
} var arr = [4, 13, 27, 38, 49, 49, 65, 55, 97, 76]
console.log(quickSort(arr));

下面这个是经典快拍,交换元素,空间复杂度最低。

function quickSort(arr, left=0, right=arr.length) {
if(left >= right) return;
var i = left;
var j = right - 1;
var privot = arr[left];
//console.log(privot);
while(i < j) {
while(i<j && arr[j] >= privot) j--;
arr[i] = arr[j];
while(i<j && arr[i] <= privot) i++;
arr[j]=arr[i];
}
arr[i]=privot;
quickSort(arr, left, i);
quickSort(arr, i+1, right);
   return arr;
}
const qsort = arr => arr.length <= 1? arr: 
        qsort(arr.filter(x => x < arr[0]))
        .concat(arr.filter(x => x == arr[0]))
        .concat(qsort(arr.filter(x => x > arr[0])))

以下是阮一峰版,比较好理解,但是splice已是O(n)的复杂度

var quickSort = function(arr) {
  if (arr.length <= 1) { return arr; }
  var pivotIndex = Math.floor(arr.length / 2);
  var pivot = arr.splice(pivotIndex,1)[0];
  var left = [];
  var right = [];
  for (var i = 0; i < arr.length; i++){
    if (arr[i] < pivot) {
      left.push(arr[i]);
    } else {
      right.push(arr[i]);
    }
  }
  return quickSort(left).concat([pivot], quickSort(right));
};

4希尔排序

 function shellSort(arr){
var N=arr.length;
var h=1;
while(h<N/3){
console.log(h);
h=3*h+1;//设置间隔
}
while(h>=1){
for(var i=h; i<N; i++){
for(j=i; j>=h && arr[j]<arr[j-h]; j-=h){
swap(arr, j, j-h);
console.log(arr);
}
}
h=(h-1)/3;
}
}
function swap(array, i, j){//两个数调换
var temp =array[j];
array[j]=array[i];
array[i]=temp;
}

5.归并排序

    function merge(left, right) {

   var re = [];
while(left.length > 0 && right.length > 0) {
if(left[0] < right[0]) {
re.push(left.shift());
} else {
re.push(right.shift());
}
}
/* 当左右数组长度不等.将比较完后剩下的数组项链接起来即可 */ return re.concat(left).concat(right);
} function mergeSort(array) { if(array.length == 1) return array;
/* 首先将无序数组划分为两个数组 */
var mid = Math.floor(array.length / 2);
var left = array.slice(0, mid);
var right = array.slice(mid);
/* 递归分别对左右两部分数组进行排序合并 */
return merge(mergeSort(left), mergeSort(right));
} mergeSort(a);

js常见的排序算法的更多相关文章

  1. 常见的排序算法总结(JavaScript)

    引言 排序算法是数据结构和算法之中的基本功,无论是在笔试还是面试,还是实际运用中都有着很基础的地位.这不正直七月,每年校招的备战期,所以想把常见的排序算法记录下来.在本篇文章中的排序算法使用 Java ...

  2. [ 转载 ] js十大排序算法:冒泡排序

    js十大排序算法:冒泡排序  http://www.cnblogs.com/beli/p/6297741.html

  3. java编程之常见的排序算法

    java常见的排序算法 第一种:插入排序 直接插入排序 1, 直接插入排序 (1)基本思想:在要排序的一组数中,假设前面(n-1)[n>=2] 个数已经是排 好顺序的,现在要把第n个数插到前面的 ...

  4. Python全栈开发之5、几种常见的排序算法以及collections模块提供的数据结构

    转载请注明出处http://www.cnblogs.com/Wxtrkbc/p/5492298.html 在面试中,经常会遇到一些考排序算法的题,在这里,我就简单了列举了几种最常见的排序算法供大家学习 ...

  5. java讲讲几种常见的排序算法(二)

    java讲讲几种常见的排序算法(二) 目录 java讲讲几种常见的排序算法(一) java讲讲几种常见的排序算法(二) 堆排序 思路:构建一个小顶堆,小顶堆就是棵二叉树,他的左右孩子均大于他的根节点( ...

  6. java讲讲几种常见的排序算法

    java讲讲几种常见的排序算法(一) 目录 java讲讲几种常见的排序算法(一) java讲讲几种常见的排序算法(二) 以数组array={6,3,20,8,15,1}为例 冒泡排序 思路:从第0个到 ...

  7. java几种常见的排序算法总结

    /*************几种常见的排序算法总结***************************/ package paixu; public class PaiXu { final int  ...

  8. Java实现常见的排序算法

    一.排序算法 常见的排序算法主要分为下面几类: 选择排序 堆排序 冒泡排序 快速排序 插入排序 希尔排序 归并排序 桶式排序 基数排序 本文主要介绍选择排序.堆排序.冒泡排序.快速排序和归并排序的原理 ...

  9. 七种常见经典排序算法总结(C++实现)

    排序算法是非常常见也非常基础的算法,以至于大部分情况下它们都被集成到了语言的辅助库中.排序算法虽然已经可以很方便的使用,但是理解排序算法可以帮助我们找到解题的方向. 1. 冒泡排序 (Bubble S ...

随机推荐

  1. Window.scrollTo()

    摘要 滚动到文档中的某个坐标. 语法 window.scrollTo(x-coord,y-coord ) window.scrollTo(options) 参数 x-coord 是文档中的横轴坐标. ...

  2. artTemplate精彩文章(个人阅读过)

    轻量级artTemplate引擎 实现前后端分离—基础篇 :https://www.imooc.com/article/20263 轻量级artTemplate引擎 实现前后端分离—语法篇 : htt ...

  3. git上传本地代码到github

      1.(先进入项目文件夹)通过命令 git init 把这个目录变成git可以管理的仓库 git init 2.把文件添加到版本库中,使用命令 git add .添加到暂存区里面去,不要忘记后面的小 ...

  4. Python基础知识1-基础语法

    pyenv--版本管理工具(后续再补)可参见https://www.jianshu.com/p/8aaf2525fa80 冯诺依曼体系架构 编程基础 语言分类  低级语言到高级语言 高级语言 程序Pr ...

  5. hive条件函数

    case相当于if,when相当于=:then是条件满足的结论.否则实行else后语句,一end结束

  6. js auto hover button & html5 button autofocus

    js auto hover button & html5 button autofocus input // html 5 <input name="myinput" ...

  7. Java使用RabbitMQ之整合Spring(生产者)

    依赖包 <!--RabbitMQ集成spring--> <!-- https://mvnrepository.com/artifact/org.springframework.amq ...

  8. thinkphp视图中插入php代码

    性别: <?php if($item['sex'] == 1):?> 男 <?php else:?> 女 <?php endif;?> 错误:<?php ec ...

  9. Coalesce (MS SQL Server)——取指定内容(列)中第一个不为空的值

    oalesce 获得参数中第一个不为空的表达式. 语法:        COALESCE ( expression [ ,...n ] ) 例子:CREATE TABLE wages          ...

  10. Condition线程通信(七)

    前言:对于线程通信,使用synchronized时使用wait.notify和notifyAll来实行线程通信.而使用Lock如何处理线程通信呢?答案就是本片的主角:Condition. 一.Cond ...