美文网首页
使用JavaScript实现几种常用的排序算法

使用JavaScript实现几种常用的排序算法

作者: 他在写的 | 来源:发表于2019-03-12 18:20 被阅读0次

冒泡排序

function BubbleSort(arr){
    if(arr.length<=1){return arr};

    for(let i =0;i<arr.length;i++){
        for(j=i+1;j<arr.length;j++){
            if(arr[i]>arr[j]){
                [arr[i],arr[j]] = [arr[j],arr[i]];
            }
        }
    }

    return arr;
}

快速排序

function quickSort(arr){
  //如果数组<=1,则直接返回
  if(arr.length<=1){return arr;}

  //找基准,并把基准从原数组删除
  let pivotIndex=Math.floor(arr.length/2);
  let pivot=arr.splice(pivotIndex,1)[0];
  
  //定义左右数组
  let left=[];
  let right=[];

  //比基准小的放在left,比基准大的放在right
  for(let 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));
  return [...quickSort(left),pivot,...quickSort(right)];
}

归并排序

function merge(left,right){
    //"治"阶段,合并数组
    let result = [];
    while(left.length>=1&&right.length>=1){
        if(left[0]<right[0]){
            result.push(left.shift());
        }else{
            result.push(right.shift());
        }
    }
    //将左右数组剩下的也合并
    return result.concat(left).concat(right);
}
function mergeSort(arr){
    //"分"阶段,分离数组
    //递归出口,数组长度为1时,就到了“分”阶段的最底层
    if(arr.length ==1){
        return arr;
    }
    //找出基准点
    let pivot = Math.floor(arr.length/2);
    //分出左右数组(右数组包括基准点)
    let left = arr.slice(0,pivot);
    let right = arr.slice(pivot);
    return merge((mergeSort(left)),mergeSort(right));
}

插入排序

function insertionSort(iArr) {
    var oArr = [iArr[0]];
    var n = iArr.length;
    // 从左边开始,每次拿一个与已排列好的数组进行比较
    for (var i = 1; i < n; i++) {
        for (var j = 0; j < i; j++) {
            if (iArr[i] <= oArr[j]) {
            // 若介于小于该元素,则插入其前方
            oArr.splice(j, 0, iArr[i]);
            break;
            } else if (j === i - 1) {
                // 若比最后一个还大,则排在最右侧
                oArr.push(iArr[i]);
                }
        }
    }
    return oArr;
}

选择排序

function selectSort(arr){
    var len= arr.length,
        minIndex,nu;
    for(var i = 0; i < len-1; i++){
        minIndex = i;//记录每次循环的第一个数为该次循环的最小值索引
        for(var j = i+1; j < len; j++){
            if(arr[j]<arr[minIndex]){
                minIndex = j;//找到每次循环到的最小值,
            }
        }
        nu = arr[i];
        arr[i] = arr[minIndex];//将找到的最小值放在每次循环的最开始的地方;
        arr[minIndex] = nu;

    }
    return arr;
}

希尔排序

function shellSort(arr) {
    for(let gap = Math.floor(arr.length/2); gap > 0; gap = Math.floor(gap/2)) {
      // 内层循环与插入排序的写法基本一致,只是每次移动的步长变为 gap
      for(let i = gap; i < arr.length; i++) {
        let j = i;
        let temp = arr[j];
        for(; j> 0; j -= gap) {
          if(temp >= arr[j-gap]) {
            break;
          }
          arr[j] = arr[j-gap];
        }
        arr[j] = temp;
      }
    }
    return arr;
}

相关文章

  • 2019-08-11

    Javascript中常用几种基础算法 1 排序-冒泡排序 //冒泡排序 function bubbleSort...

  • 使用JavaScript实现几种常用的排序算法

    冒泡排序 快速排序 归并排序 插入排序 选择排序 希尔排序

  • JavaScript 实现多种排序算法

    本章将介绍 JavaScript 如何实现排序,几种排序算法介绍如下图: 准备工具函数 util.js 备用: 借...

  • 7大经典的排序算法总结实现

    作者 : 专注J2EE来源 : 博客园 常见排序算法总结与实现 本文使用Java实现这几种排序。以下是对排序算法总...

  • 全面介绍9种常用的排序算法

    本篇给大家介绍几种软件工程中常用的排序算法 所有排序算法的核心的代码都在《常用排序算法核心代码》[https://...

  • JavaScript实现的9大排序算法

    笔试面试经常涉及各种算法,本文简要介绍常用的一些算法,并用javascript实现。 1、插入排序 1)算法简介 ...

  • JavaScript实现经典排序算法

    使用JavaScript实现的经典排序算法 util 冒泡 简单选择 直接插入 快速排序 堆排序 归并排序

  • 斌斌学院JS-task5

    任务目的 学习与实践JavaScript的基本语法、语言特性 练习使用JavaScript实现简单的排序算法 任务...

  • Js 实现基础排序算法

    本文使用 JavaScript 实现的基础的 8 种排序算法,复杂度归纳如下:O(n^2) ——冒泡排序、插入排序...

  • python 排序算法

    文章概述 介绍各大常用经典的排序算法和效率,以及python实现常用算法(冒泡排序,选择排序,快速排序,插入排序)...

网友评论

      本文标题:使用JavaScript实现几种常用的排序算法

      本文链接:https://www.haomeiwen.com/subject/pmdnpqtx.html