前端面试分享:冒泡排序和快速排序

news/2024/5/20 0:30:22 标签: 面经, 冒泡, 快速排序

前端面试过程中,某些公司对基础的算法也有一定的要求,比如常见的冒泡排序,快排等,今天我们就一起来看一下这两个排序算法。

冒泡排序

排序思想: 每次比较相邻的两个数,如果后一个比前一个小,则换位置。看一下动图来体验一下:
在这里插入图片描述
每一次冒泡,都会把最大的一个数选出来,之后就会少比较一次。

基本思路: 每一次冒泡都需要选出一个最大值,可知:假设有n个数,我们就需要执行n-1次冒泡,每一次冒泡,会比较相邻的两个数,而且比较的次数是n-1-冒泡次数,因为冒泡一次会选出一个最大值,最大值就不参与之后的比较了。

代码实现:

var arr = [5, 6, 3, 1, 8, 7, 2, 4];

function bubbleSort(arr) {
	for (var i = 0; i < arr.length - 1; i++) {
		for(var j = 0; j < arr.length - i - 1; j++) {
			if(arr[j + 1] < arr[j]) {
				var temp;
				temp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = temp;
			}
		}
	}
	return arr;
}

console.log(bubbleSort(arr));

快速排序

排序思想: 采⽤⼆分法,取出中间数,数组每次和中间数⽐较,⼩的放到左边,⼤的放到右边。

基本思路: 找出待排序数组的中间数,以它为基准,如果比它小,就放到左边,大的话放到右边,然后依次对左边和右边的两个数组做上述操作。

var arr = [3, 1, 4, 6, 5, 7, 2];

function quickSort(arr) {
	if(arr.length == 0) {
		return []; // 返回空数组
	}
	var cIndex = Math.floor(arr.length / 2);
	var c = arr.splice(cIndex, 1);
	var l = [];
	var r = [];
	for (var i = 0; i < arr.length; i++) {
		if(arr[i] < c) {
			l.push(arr[i]);
		} else {
			r.push(arr[i]);
		}
	}
	return quickSort(l).concat(c, quickSort(r));
}

console.log(quickSort(arr));

上面是对于冒泡排序和快速排序的代码实现,有关其他的排序算法可以参考以下链接:
https://www.cnblogs.com/onepixel/articles/7674659.html


http://www.niftyadmin.cn/n/1659451.html

相关文章

国内免费(开源)CMS内容管理系统介绍

最近在网上搜集了一下国内的CMS程序&#xff0c;包括了类型&#xff0c;脚本&#xff0c;及其特点和评价&#xff0c;希望能对大家有所帮助&#xff0c; 由于搜集于网络难免有不足和纰漏之处&#xff0c;还请大家能多多指正&#xff01; 首先还是介绍一下什么是CMS。CMS&…

Javascript高级程序设计——12.基本包装类型

内容要点&#xff1a; 1、基本包装类型 2、Boolean类型 3、Number类型 4、String类型 背景&#xff1a; 为了便于操作基本类型的值&#xff0c;ECMAScript提供了3种特殊的引用类型&#xff1a;Booloean、String、Number 这些类型与其他引用类型相似&#xff0c;但却同时具…

JS数组去重方法整理,再也不用担心数组如何去重了

前端笔试的过程中&#xff0c;大概率会有这样一道题&#xff0c;给你一个字符串数组&#xff0c;让你输出其中不重复的字符串的个数&#xff0c;这就是典型的数组去重了&#xff0c;那应该如何进行数组去重呢&#xff1f;本篇文章整理了近10种方案&#xff0c;你来看看那个最适…

Javascript高级程序设计——13.内置对象

ECMA-262只定义了2个内置对象&#xff1a;Globel和Math 1、Global对象 表示全局变量&#xff0c;但该对象其实并不存在&#xff0c; 事实上&#xff0c;并不存在全局变量和全局函数&#xff1a;所有在全局作用于定义的变量和函数&#xff0c;都是Global对象的属性和方法 注意…

你需要知道的解决跨域的方案

今天我们再来分享一下关于跨域的问题&#xff0c;虽然之前也有分享过&#xff0c;但是解决方案不太全&#xff0c;且最近在面试的过程中&#xff0c;跨域是一个经典问题&#xff0c;所以我们需要知道其中的原理。 什么是跨域 跨域是浏览器的同源策略导致的。 什么是同源策略呢…

14.文件上传(小案例及解析)

1、php文件上传配置 a、file_uploadson/off; //确定服务器 b、upload_tmp_dirstring;//设置文件上传之前必须存放在服务器临时一个位置&#xff0c;知道文件移动到最终目的地位置。 c、max_execution_timeinteger; ///PHP脚本在注册一个致命错误之前可以执行的最长…

面经总结:何为Promise

Promise是ES6提供的对象&#xff0c;代表了未来将要发生的事件&#xff0c;用来传递异步操作的消息。Promise在开发和面试的过程中都很重要&#xff0c;下面我们一起来看一下关于Promise的相关知识。 Promise的状态 Promise对象代表一个异步操作&#xff0c;有三种状态&#x…

初识Node——Node.js的安装和测试

相信对于专注JavaScript发展的同学来说,nodejs已经不是一个陌生的词眼。有关nodejs的相关资料网上已经铺天盖地。由于它的高并发特性&#xff0c;造就了其特殊的应用地位。 借用Node.js官网的定义&#xff1a;Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。Node.j…