js的基本算法概述

算法的时间复杂度是一个函数,描述了算法的运行时间。时间复杂度越低,效率越高。一个算法,运行了几次时间复杂度就为多少,如运行了n次,则时间复杂度为O(n)。

一,冒泡排序
1.比较相邻的两个元素,如果前一个比后一个大,则交换位置。
2.第一轮的时候最后一个元素应该是最大的一个。
3.按照步骤一的方法进行相邻两个元素的比较,这个时候由于最后一个元素已经是最大的了,所以最后一个元素不用比较。

二,快速排序
快速排序是对冒泡排序的一种改进,第一趟排序时将数据分成两部分,一部分比另一部分的所有数据都要小。然后递归调用,在两边都实行快速排序。

三,插入排序
1, 从第一个元素开始,该元素可以认为已经被排序
2, 取出下一个元素,在已经排序的元素序列中从后向前扫描
3, 如果该元素(已排序)大于新元素,将该元素移到下一位置
4, 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置
5,将新元素插入到下一位置中
6, 取出下一个元素,在已经排序的元素序列中从后向前扫描

一般是这三种算法。
另外还有几种常用的,如下:

一,选择排序
表现最稳定的排序算法之一,无论什么数据进去都是O(n²)的时 间复杂度…所以用到它的时候,数据规模越小越好。

二,希尔排序
是简单插入排序的改进版;它与插入排序的不同之处在于,它会优先比较距离较远的元素。因此希尔排序又叫缩小增量排序

三,归并排序
和选择排序一样,归并排序的性能不受输入数据的影响,但表现比选择排序好的多,因为始终都是O(n log n)的时间复杂度。代价是需要额外的内存空间。

四,堆排序
堆排序可以说是一种利用堆的概念来排序的选择排序。
利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。

五,计数排序
计数排序的核心在于将输入的数据值转化为键存储在额外开辟的数组空间中。 作为一种线性时间复杂度的排序,计数排序要求输入的数据必须是有确定范围的整数。

六,桶排序
桶排序是计数排序的升级版。它利用了函数的映射关系,高效与否的关键就在于这个映射函数的确定。
原理:假设输入数据服从均匀分布,将数据分到有限数量的桶里,每个桶再分别排序。

七,基数排序
基数排序也是非比较的排序算法,对每一位进行排序,从最低位开始排序,复杂度为O(kn),为数组长度,k为数组中的数的最大的位数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值