排序算法

作者: 得得哎 | 来源:发表于2020-03-20 01:35 被阅读0次

一、冒泡排序

  1. 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
  2. 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
  3. 针对所有的元素重复以上的步骤,除了最后一个。
  4. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
    var sortArray = function(nums) {
        for(let i = 0;i<nums.length-1;i++){
            for(let j = 0;j<nums.length-1-i;j++){
                if(nums[j+1]<nums[j]){
                                    [nums[j+1],nums[j]] = [nums[j],nums[j+1]]
                    ~~var temp = nums[j+1]
                    nums[j+1] = nums[j]
                    nums[j] = temp~~
                }
            }
        }
        return nums;
    };

二、插入排序

思路:类似斗地主的时候分牌时边拿牌边排序的方式,每次取出数组一个数,再循环新数组,从数组的最后一位判断两个数的大小,循环中遇到第一个比他大的数A的时候,用splice把数插在A后面。
1、需要排序的数组为Arr,取出第一个数作为新数组A
2、从第二个数开始循环遍历数组Arr,并从数组A的最后一项开始循环数组A
3、Arr的每一项分别从数组A的后往前作对比,当Arr的数第一次遇到比数组A的某一项大的时候,将数插在该项的后面。
4、循环3的操作直到数组Arr结束

    let arr = [3,3,4,5,6,1,3,5,5,6,1]
      let newArr = [arr[0]]
      for(let i = 1;i < arr.length-1;i++){
          for(let j = newArr.length-1;j>=0;j--){
              if(arr[i]>newArr[j]){
                  newArr.splice(j+1,0,arr[i])
                  break;
              }
              if(j === 0){
                  newArr.unshift(arr[i])
              }
    
          }
      }
      console.log(newArr)

三、快速排序

思路:采用二分法的方式,选出中间那一项的值并取出,然后对比其他值如果比中间项大放”arrRight“数组,比中间项小又放”arrLeft“数组,最后合并”arrRIght“+中间项+“arrLeft"
1、取数组的中间项middleItem并从原数组分离
2、申请左数组arrLeft和右数组arrRight两个新空间
3、循环遍历原数组其他项与中间项对比,大的放右数组,小的放左数组
4、合并”arrRIght“+中间项+“arrLeft"

    let arr = [3,3,4,5,6,1,3,5,5,6,1]
    function quick(arr){
        if(arr.length<=1){
            return arr
        }
        //寻找数组中间项,并取出来
        let middleItem = arr.splice(Math.floor(arr.length/2),1)[0]
        let arrRight = [],
            arrLeft = []
        for(let i = 0;i<arr.length;i++){
            arr[i]>middleItem?arrRight.push(arr[i]):arrLeft.push(arr[i])
        }
        return quick(arrLeft).concat(middleItem,quick(arrRight))
    }
    console.log(quick(arr))

四、选择排序

思路:给每个位置选择当前元素最小的,比如取出第一位,取出当前数组最小值与第一位交换位置,再取第二位,再找到最小值与第二位交换,以此类推

    var arr = [1, 3, 2, 8, 9, 1, 5];
    function SelectionSort(arr) {
        if (arr == null || arr.length < 2) {
            return arr;
        }
        for (let i = 0; i < arr.length - 1; i++) {
            let minIndex = i;
            for (let j = i + 1; j < arr.length; j++) {
                minIndex = arr[j] < arr[minIndex] ? j : minIndex;
            }
            [arr[i],arr[minIndex]] = [arr[minIndex],arr[i]]
        }
        return arr;
    }

相关文章

  • java实现快速排序、归并排序、希尔排序、基数排序算法...

    快速排序算法 归并排序算法 希尔排序算法 基数排序算法

  • web开发需要知道的几个算法

    算法分类 快速排序算法 深度优先算法 广度优先算法 堆排序算法 归并排序算法

  • 算法学习(1)-排序算法

    八大排序算法九大排序算法再总结[经典排序算法][集锦][直观学习排序算法] 视觉直观感受若干常用排序算法 快速排序...

  • 经典排序算法总结

    经典排序算法集锦 冒泡法 排序算法入门之冒泡排序 排序算法入门之冒泡排序优化

  • 前端算法学习-第一篇

    冒泡排序算法 冒泡排序算法是最慢的排序算法之一,也是最容易实现的排序算法。之所以叫冒泡排序是因为使用这种算法排序时...

  • 七大排序算法之冒泡排序

    七大排序算法之冒泡排序 @(算法笔记)[排序算法, 冒泡排序, C++实现] 冒泡排序介绍 冒泡排序是七大排序算法...

  • 算法-选择排序

    算 法:选择排序算法时间复杂度: 选择排序算法概述 选择排序伪代码 选择排序实现 选择排序算法概述 排序算法有许...

  • 浅谈排序算法

    排序算法有很多种,今天先谈谈一些简单的排序算法。包括桶排序、冒泡排序和快速排序算法。后期总结各种排序算法。 桶排序...

  • 线性排序

    桶排序、计数排序、基数排序 一、线性排序算法介绍 1.线性排序算法包括桶排序、计数排序、基数排序。2.线性排序算法...

  • 算法4:插入排序和选择排序算法的比较

    排序算法列表电梯: 选择排序算法:详见 《算法4》2.1 - 选择排序算法(Selection Sort), Py...

网友评论

    本文标题:排序算法

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