《学习javascript数据结构与算法》算法

本文介绍了JavaScript中的几种排序算法,包括冒泡排序、选择排序、插入排序、归并排序和快速排序,并详细讲解了二分搜索的概念。此外,还探讨了动态规划的基本原理及其在解决背包问题、最长公共子序列、矩阵乘法和找零问题等经典问题中的应用。动态规划与分而治之的区别也进行了说明。
摘要由CSDN通过智能技术生成
排序算法
  • 冒泡排序:拿当前值跟后面的值挨个比较 如果当前值比后面的值大 就替换位置

  • 选择排序:每次找到数组中最小的值的索引 跟当前索引位置元素交换

  • 插入排序:把当前索引的值当作一个基准 拿前一个值跟这个值对比 如果比他大就替换他的位置 最后把它插入到自己该在的位置。排序小型数组时,此算法比选择排序和冒泡排序性能要好

  • 归并排序:把数组先剁两半 然后各自排序 不断递归这个过程 最后把两大半数组排序,其复杂度跟快排一样 为O(nlogn) logn的意思是以2为底n的对数 说白了就是2的几次方等于n

  • 快排:快排的复杂度和归并排序一样为O(nlogn) 一指针两拨片
    1.首先,从数组中选择中间一项作为主元。
    2.创建两个指针,左边一个指向数组第一个项,右边一个指向数组最后一个项。然后移动左右指针,左找大,右找小,交换位置
    重复这个过程,直到左指针超过了右指针。这个过程将使得比主元小的值都排在主元之
    前,而比主元大的值都排在主元之后。这一步叫作划分操作
    3.接着,算法对划分后的小数组(较主元小的值组成的子数组,以及较主元大的值组成的 子数组)重复之前的两个步骤,直至数组已完全排序
  • 二分搜索:
    (1) 选择数组的中间值。
    (2) 如果选中值是待搜索值,那么算法执行完毕(值找到了)。
    (3) 如果待搜索值比选中值要小,则返回步骤1并在选中值左边的子数组中寻找。 (4) 如果待搜索值比选中值要大,则返回步骤1并在选种值右边的子数组中寻找。
	function ArrayList(){
   
	  var array = [];
	  let times = 0
	  	this.insert = function(item){
    
	        array.push(item);
		};
	  	this.toString= function(){
    
	        return array.join();
		};
		//拿当前值跟后面的值挨个比较 如果当前值比后面的值大 就替换位置
		this.bubbleSort = function(){
   
	    	var length = array.length;
	    	for (var i=0; i<length; i++){
   
	    		for (var j=0; j<length-1; j++ ){
    
			    	if (array[j] > array[j+1]){
   
			        	swap(j, j+1);           
					} 
				}
			}
			return array;
		}

		var swap = function(index1, index2){
   
	    	var aux = array[index1];
	    	array[index1] = array[index2];
	    	array[index2] = aux;
		}

		this.modifiedBubbleSort = function(){
   
		    var length = array.length;
		    for(var i=0; i<length; i++){
   
		        for (var j=0; j<length-i; j++ ){
   
		            if(array[j] > array[j+1]){
   
		            	swap(j, j+1);
					}
				} 
			}
			return array
		};
		//选择排序:每次找到数组中最小的值的索引 跟当前索引位置元素交换
		this.selectionSort = function(){
   
	      	let length = array.length;
	      	for(let i=0;i<length;i++){
   
	      		let minIndex = i;
	      		for(let j = i;j<length;j++){
   
	      			if(array[</
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值