美文网首页前端面试之路
各种常用算法介绍

各种常用算法介绍

作者: ybrelax | 来源:发表于2019-08-01 23:06 被阅读0次
各种排序的时间复杂度

对于以上的O可能有部分人不是很了解,O表示算法的性能和复杂度。(通常来说就是占用cpu的情况)


冒泡排序

就是两层for循环,前后两个值进行比较

function popSort() {
   var a = [1,5,6,7,8,10,9,3,21,6];
   var n=a.length;
   var tem;
   for(let i=0;i<n;i++){
            for(int j=0;j<n-i-1;j++){
                if(a[j]>a[j+1]){
                    tem=a[j];
                    a[j]=a[j+1];
                    a[j+1]=tem;
                }
            }
        }
}

把冒泡时间负责度缩小的办法

// 改进冒泡排序
function bubbleSort1(arr) {
    let i = arr.length - 1;

    while (i > 0) {
        let pos = 0;
        for (let j = 0; j < i; j++) {
            if (arr[j] > arr[j + 1]) {
                pos = j;
                const temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            }
        }
        i = pos;
    }
    console.log(arr);
}

快速排序

采取的思想为分而治的思想,以基数来进行比较

// 快速排序
const quickSort = (arr, left, right) => {
    let len = arr.length,
        partitionIndex;
    left = typeof left != 'number' ? 0 : left;
    right = typeof right != 'number' ? len - 1 : right;

    if (left < right) {
        partitionIndex = partition(arr, left, right);
        quickSort(arr, left, partitionIndex - 1);
        quickSort(arr, partitionIndex + 1, right);
    }
    return arr;
};

const partition = (arr, left, right) => {
    //分区操作
    let pivot = left, //设定基准值(pivot)
        index = pivot + 1;
    for (let i = index; i <= right; i++) {
        if (arr[i] < arr[pivot]) {
            swap(arr, i, index);
            index++;
        }
    }
    swap(arr, pivot, index - 1);
    return index - 1;
};

const swap = (arr, i, j) => {
    let temp = arr[i];
    arr[i] = arr[j];
    arr[j] = temp;
}

快排不需要额外的内存空间,也就是原地排序算法
因为快排每次排序的要交换的元素可能是相邻的,也可能相隔几个的元素,所以说快排是不稳定的
快排的时间复杂度,极端情况 就是数组本身是有序的所以只要O(n), 如果数组是倒叙排列O(n2),平均下来(O(nlngn)

堆排序

堆的插入就是——每次插入都是将新数据放在数组最后,而从这个新数据的父结点到根结点必定是一个有序的数列,因此只要将这个新数据插入到这个有序数列中即可。

参考:https://juejin.im/post/5d371aa6e51d455d850d3bbe

相关文章

  • 各种常用算法介绍

    对于以上的O可能有部分人不是很了解,O表示算法的性能和复杂度。(通常来说就是占用cpu的情况) 冒泡排序 就是两层...

  • JavaScript实现的9大排序算法

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

  • 常用算法介绍

    常见算法分类 监督式学习 无监督学习 半监督学习 监督式学习 分类1.贝叶斯分类2.决策树算法3.神经网络算法4....

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

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

  • 算法04-棋牌游戏常用排序算法

    算法04-棋牌游戏常用排序算法 一、介绍 棋牌游戏常用排序算法包括:链式基数排序、插入排序、希尔排序。 二、链式基...

  • Python一行代码实现快速排序

    上期文章排序算法——(2)Python实现十大常用排序算法为大家介绍了十大常用排序算法的前五种(冒泡、选择、插入、...

  • python 排序算法

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

  • 一文了解计算机视觉的八大应用

    之前通过三篇文章简单介绍了机器学习常用的几种经典算法,当然也包括了目前很火的 CNNs 算法了: 常用机器学习算法...

  • 子字符串查找(1)

    一、定义 本文主要介绍子字符串查找的各类常用算法,如朴素匹配算法(暴力查找)、KMP算法、BM算法等。各类匹配算法...

  • Diffie-Hellman密钥协商算法

    加密算法介绍 目前常用的加密算法主要有:哈希算法(比如MD5、SHA族、Hmac),对称加密算法(比如AES),非...

网友评论

    本文标题:各种常用算法介绍

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