随笔分类 - JavaScript排序算法
摘要:计数排序 计数排序有四个步骤: (1)首先会对每个输入进行频率统计,得到元素的频率表; (2)然后将频率表转换为该元素的开始索引; (3)根据各个元素的开始索引,将相同元素分类到临时数组中。 (4)最后将临时数组中的元素写回到原数组中。 /*计数排序*/ function countingSort(
阅读全文
摘要:堆排序 堆排序是指利用堆这种数据结构所设计的一种排序算法。近似于完全二叉树,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。它的时间复杂度是O(nlog2(n)),空间复杂度是O(1),其算法不稳定。 var length;//因为声明的多个函数都需要数据长度,所以把len
阅读全文
摘要:希尔排序 希尔排序是插入排序的改进版本,它与插入排序的不同之处在于,它会优先比较距离较远的元素。其中它的时间复杂度为O(n^1.3),空间复杂度O(1),算法相对不稳定。 function shellSort(arr) { var length = arr.length; var temp , ga
阅读全文
摘要:归并排序 归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为2-路归并。其中时间复杂度O(nlog2(n)),空间复杂度O(n),算法相对稳定
阅读全文
摘要:插入排序 插入排序的基本工作原理:对于未排序列,在已排序列中从后向前扫描,找到相应的位置并插入。其中时间复杂度O(n^2),空间复杂度O(1),算法相对稳定。 function insertionSort(arr) { var length = arr.length; for (var i = 0;
阅读全文
摘要:冒泡排序 冒泡排序的基本原理是:每次比较两个元素,顺序错误就交换两个,直到没有再需要交换。其中时间复杂度为 O(n^2),空间复杂度为O(1),算法相对稳定。 function bubbleSort(arr) { for (var i = 0; i < arr.length - 1; i++) {
阅读全文
摘要:选择排序 选择排序的工作原理是:每次在排序序列中找到最小(大)元素,放在起始位置,然后在剩下的序列中继续寻找最小(大)元素。其中时间复杂度是O(n^2),空间复杂度O(1),算法不稳定。 function selectionSort(arr) { let length = arr.length; f
阅读全文
摘要:快速排序 快排的思路:找到一个基准数,把大于基准数的数字放在基准数的右边部分,小于基准数的放在左边部分;排完后,再对左边部分和右边部分分别进行上述操作,递归下去,直到子序只剩下一个数字。 其中快排的时间复杂度为O(nlogn),空间复杂度为O(nlogn),但算法相对不稳定。 function qu
阅读全文

浙公网安备 33010602011771号