• js常见排序算法


    冒泡排序

    找出最大的排在后面

    var bubbleSort = function (originalArray) {
      var arr = [...originalArray];
    
      for (let i = 1; i < arr.length; i += 1) {
        for (let j = 1; j < arr.length - i; j += 1) {
          if (arr[j] > arr[j + 1]) {
            [arr[j], arr[j + 1]] = [arr[j + 1], arr[j]];
          }
        }
      }
    
      return arr;
    }
    

    选择排序

    找出最小的排在前面

    var selectionSort = function (originalArray) {
      var arr = [...originalArray];
    
      for (let i = 0; i < arr.length - 1; i += 1) {
        let minIndex = i;
    
        for (let j = i + 1; j < arr.length; j += 1) {
          if (arr[j] < arr[minIndex]) {
            minIndex = j;
          }
        }
    
        if (minIndex !== i) {
          [arr[i], arr[minIndex]] = [arr[minIndex], arr[i]];
        }
      }
    
      return arr;
    

    插入排序

    var insertionSort = function (originalArray) {
      var arr = [...originalArray];
    
      for (let i = 0; i < arr.length; i++) {
        let currentIndex = i;
    
        while (
          arr[currentIndex - 1] !== undefined
          && arr[currentIndex] < arr[currentIndex - 1]
        ) {
          [arr[currentIndex - 1], arr[currentIndex]] = [arr[currentIndex], arr[currentIndex - 1]]
    
          currentIndex -= 1;
        }
    
      }
    
      return arr;
    }
    

    快速排序

    1. 数组中找一个基准值,小于基准值放左边 大于基准值放右边
    2. 递归1步骤 直至数组长度为1
    3. 合并
    var quickSort = function (originalArray) {
      var arr = [...originalArray];
    
      if (arr.length <= 1) return arr;
    
      var first = arr.shift();
      var left = [];
      var right = [];
    
      arr.forEach((item, index) => {
        if (item <= first) {
          left.push(item);
        } else {
          right.push(item);
        }
      })
    
      return [...quickSort(left), first, ...quickSort(right)];
    }
    

    归并排序

    1. 找到基准点 递归拆为左右个数相等(或差1)两部分
    2. 比较合并
    var mergeSort = function (arr) {
      if (arr.length <= 1) return arr;
    
      const middleIndex = Math.floor(arr.length / 2);
      const left = arr.slice(0, middleIndex);
      const right = arr.slice(middleIndex, arr.length);
    
      const leftSorted = mergeSort(left);
      const rightSorted = mergeSort(right);
    
      return mergeSorted(leftSorted, rightSorted);
    }
    
    var mergeSorted = function (left, right) {
      let sorted = [];
    
      while (left.length && right.length) {
        if (left[0] < right[0]) {
          sorted.push(left.shift());
        } else {
          sorted.push(right.shift());
        }
      }
    
      if (left.length) {
        sorted = sorted.concat(left);
      }
    
      if (right.length) {
        sorted = sorted.concat(right);
      }
    
      return sorted;
    }
    

    希尔排序

    var shellSort = function (originalArray) {
      var arr = [...originalArray];
    
      let gap = Math.floor(arr.length / 2);
    
      while (gap > 0) {
        for (let i = 0; i < (arr.length - gap); i += 1) {
          let current = i;
          let gapShifted = i + gap;
    
          while (current >= 0) {
            if (arr[current] > arr[gapShifted]) {
              [arr[current], arr[gapShifted]] = [arr[gapShifted], arr[current]];
            }
    
            gapShifted = current;
            current -= gap;
          }
        }
    
        gap = Math.floor(gap / 2);
      }
    
      return arr;
    }
    
  • 相关阅读:
    转 C#接收邮件
    WebApi的windows服务之路
    自动化升级工具之客户端升级工具之windows服务升级操作
    自动化升级工具之客户端升级工具之数据库升级操作
    GoJs实现流程管理图
    MvcForum作者称该项目进入缓慢更新
    生鲜蔬菜生产称重管理系统
    MvcForum中文版+PostgreSql源码下载
    Asp.Net MVC开源论坛中文版
    HTML5+Activex+Singr+ABP+MongoDB
  • 原文地址:https://www.cnblogs.com/whosmeya/p/12655110.html
Copyright © 2020-2023  润新知