排序算法
排序算法
IamSmaLLR.
这个作者很懒,什么都没留下…
展开
-
【时间复杂度】
优 评价 差 稳定性 简单选择排序 O(n2) O(n2) O(n2) × 直接插入排序 O(n...原创 2021-01-01 15:25:46 · 98 阅读 · 0 评论 -
快速排序寻找第K大的数
/** * * @param a int整型一维数组 * @param n int整型 * @param K int整型 * @return int整型 */ function findKth( a , n , K ) { // write code here var result = 0; function QuickSort(arr,i,j,k){ if (i <= j) { let left = i; .原创 2021-02-14 23:48:53 · 269 阅读 · 0 评论 -
版本号排序
JS写版本号排序,如传入参数[‘1.5’,‘2.0’,‘1.7’,‘1.1.5’] 返回 [‘1.1.5’,‘1.5’,‘1.7’,‘2.0’] 1.sort let arr = ['1.5','2.0','1.7','1.1.5'] arr.sort(function(a,b){ return a>b?1:-1}); console.log(arr) //["1.1.5", "1.5", "1.7", "2.0"] 换个case可能存在错误 为什么字符串比较能够轻松的实现排序? sort() 对数原创 2021-02-20 19:22:37 · 1106 阅读 · 0 评论 -
快速排序
//时间复杂度分析: //最好的情况:整个数组被分为两个长度相等的子数组时, 时间复杂度为 O(nlogn) //最坏的情况:待排序的序列为正序或者逆序,每次划分只得到一个比上一次划分少一个记录的子序列 (退化成冒泡排序的情况)时间复杂度为O(n的平方) //平均时间复杂度为:O(nlogn)有可能改变相等元素的原始位置,所以快速排序是一种不稳定的排序。 //空间复杂度分析: //首先就地...原创 2020-12-18 09:15:24 · 180 阅读 · 0 评论 -
直接插入排序
//从第一个元素开始,该元素可以认为已经被排序; // 取出下一个元素,在已经排序的元素序列中从后向前扫描; // 如果该元素(已排序)大于新元素,将该元素移到下一位置; // 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置; // 将新元素插入到该位置后; // 重复步骤2~5。 //时间复杂度:最好的情况原本就是有序O(n) 最坏的情况 O(n的平方) 平均O(n的平方) //空...原创 2020-12-17 05:22:09 · 75 阅读 · 0 评论 -
冒泡排序
//1、比较相邻的两个元素,如果前一个比后一个大,则交换位置。 // 2、比较完第一轮的时候,最后一个元素是最大的元素。 // 3、这时候最后一个元素是最大的,所以最后一个元素就不需要参与比较大小。 //时间复杂度:最好的情况原本就是有序O(n) 最坏的情况 O(n的平方) 平均O(n的平方) //空间复杂度:O(1) //该排序算法稳定 var arr = [49, 38,...原创 2020-12-17 05:59:15 · 80 阅读 · 0 评论 -
二路归并排序
var arr = [49, 38, 65, 97, 76, 13, 27, 48, 55, 4]; function MergeSort(arr) { var len = arr.length; if(len<=1){ return arr; } var middle = Math....原创 2020-12-18 09:10:25 · 71 阅读 · 0 评论 -
直接选择排序
//选择排序(Selection-sort)是一种简单直观的排序算法。它的工作原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置, //然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。 //超级稳定的算法 时间复杂度永远是O(n的平方) //空间复杂度为O(1) var arr = [49, 38,...原创 2020-12-18 07:18:42 · 137 阅读 · 0 评论 -
希尔排序(缩小增量排序)
//选择一个增量序列t1,t2,…,tk,其中ti>tj,tk=1; //按增量序列个数k,对序列进行k 趟排序; //每趟排序,根据对应的增量ti,将待排序列分割成若干长度为m 的子序列,分别对各子表进行直接插入排序。 //仅增量因子为1 时,整个序列作为一个表来处理,表长度即为整个序列的长度。 //它与插入排序的不同之处在于,它会优先比较距离较远的元素 //时间复杂度:最好的情况原本...原创 2020-12-17 20:29:04 · 106 阅读 · 0 评论 -
堆排序(大根堆)
var arr = [49,38,27,97,76,13,65,50]; function MaxHeap(arr,size,i){ //左子节点 var left = i*2+1; //右子节点 var right = i*2+2; //假设这个根节点为最大 var max = i ...原创 2020-12-18 07:16:08 · 123 阅读 · 0 评论