一道JS算法面试题——冒泡、选择排序


Posted in Javascript onApril 21, 2021

基础排序

今天学习了数据结构,遇到了一个关于算法的面试题,然后从中想到了冒泡排序和选择排序对一个数组从小到大的排序的方法,今天分享给大家,顺便记录下我的学习经历吧。

冒泡排序

要求:对数组[6,3,8,2,9,1]进行从小到大的排序
想法:相邻的两个位置进行对比,如果大的那个换到右边,小的那个换到左边。上代码!

var arr = [6,3,8,2,9,1];
var len = arr.length;
for(var i=0;i<arr.length;i++){
	//len-1-i的意思是数组最后那个的长度
	for(var j=0;j<len-1-i;j++){
		if(arr[j]>arr[j+1]){
			var temp = arr[j];//因为arr[j]会被赋值,所有要先保存一下
			arr[j] = arr[j+1];
			arr[j+1] = temp;
		}
	}
}

选择排序

要求:对数组[49,27,65,97,76,12,38]进行从小到大的排序
想法:创建一个指针先指向第一位置,然后另一个指针扫后面所有的,找到最小的,跟第一个指针互换位置

var arr = [49,27,65,97,76,12,38];
var len = arr.length;
var pont = null;//设定一个指针
for(var i=0;i<arr.length;i++){
	pont = i;//指针先指向第一个位置
	for(var j=i+1;j<arr.length;j++){
		if(arr[point] > arr[j]){
			pont = j;
		}
	}
	var temp = arr[i];
	arr[i] = arr[point];
	arr[point] = temp;
}

面试题

要求:把数组[{‘brand’:‘可乐’,‘price’:3,‘year’:2021},{‘brand’:‘薯片’,‘price’:7,‘year’:2020},{‘brand’:‘朗姆酒’,‘price’:200,‘year’:1999},{‘brand’:‘薯条’,‘price’:7,‘year’:2021},{‘brand’:‘营养快线’,‘price’:5,‘year’:2021}] 安装价格从小到大排序,如果价格一样,价格按从大到小排序。
想法:用刚才的选择排序来实现

var arr = [{'brand':'可乐','price':3,'year':2021},{'brand':'薯片','price':7,'year':2020},{'brand':'朗姆酒','price':200,'year':1999},{'brand':‘薯条’,'price':7,'year':2021},{'brand':‘营养快线’,'price':5,'year':2021}];
var len = arr.length;
var point = null;
for(var i=0; i<arr.length;i++){
	point = i;
	for(var j=i+1;j<arr.lenth;j++){
		if(arr[pont]['price'] > arr[j]['price']){
			point = j;
		}else if(arr[point]['price'] > arr[j]['price'] && arr[point]['year'] < arr[j]['year']){
			point = j;
		}
	}
	var temp = arr[i];
	arr[i] = arr[point];
	arr[point] = temp;
}

这样就实现了,题目要求的排序了。如果有喜欢前端的伙伴,可以关注我一下,我会每周不定期,分享前端的小知识点,一起学习进步。

Javascript 相关文章推荐
JavaScipt基本教程之JavaScript语言的基础
Jan 16 Javascript
JavaScript 验证码的实例代码(附效果图)
Mar 22 Javascript
浅析js中的浮点型运算问题
Jan 06 Javascript
AngularJS控制器详解及示例代码
Aug 16 Javascript
Javascript发送AJAX请求实例代码
Aug 21 Javascript
javascript监听页面刷新和页面关闭事件方法详解
Jan 09 Javascript
Vue2.0基于vue-cli+webpack同级组件之间的通信教程(推荐)
Sep 14 Javascript
AngularJs的UI组件ui-Bootstrap之Tooltip和Popover
Jul 13 Javascript
jQuery的ztree仿windows文件新建和拖拽功能的实现代码
Dec 05 jQuery
element-ui 文件上传修改文件名的方法示例
Nov 05 Javascript
微信小程序自定义模态弹窗组件详解
Dec 24 Javascript
原生JS实现京东查看商品点击放大
Dec 21 Javascript
吃通javascript正则表达式
Apr 21 #Javascript
Ajax是什么?Ajax高级用法之Axios技术
在HTML5 localStorage中存储对象的示例代码
Apr 21 #Javascript
canvas多重阴影发光效果实现
JavaScript+HTML实现学生信息管理系统
浅谈vue2的$refs在vue3组合式API中的替代方法
JS实现简单控制视频播放倍速的实例代码
You might like
SMARTY学习手记
2007/01/04 PHP
php中session过期时间设置及session回收机制介绍
2014/05/05 PHP
php实现网页端验证码功能
2017/07/11 PHP
关于laravel框架中的常用目录路径函数
2019/10/23 PHP
js每次Title显示不同的名言
2008/09/25 Javascript
使用jQuery和Bootstrap实现多层、自适应模态窗口
2014/12/22 Javascript
详解AngularJS过滤器的使用
2016/03/11 Javascript
vue项目部署上线遇到的问题及解决方法
2018/06/10 Javascript
详解如何快速配置webpack多入口脚手架
2018/12/28 Javascript
JavaScript数组去重的方法总结【12种方法,号称史上最全】
2019/02/28 Javascript
JavaScript中的一些实用小技巧总结
2019/04/07 Javascript
vue.js中使用echarts实现数据动态刷新功能
2019/04/16 Javascript
关于微信小程序获取小程序码并接受buffer流保存为图片的方法
2019/06/07 Javascript
[01:42]TI4西雅图DOTA2前线报道 第一顿早饭哦
2014/07/08 DOTA
[03:20]2015国际邀请赛全明星表演赛
2015/08/08 DOTA
[01:07:47]Secret vs Optic Supermajor 胜者组 BO3 第一场 6.4
2018/06/05 DOTA
[02:04]完美世界城市挑战赛秋季赛报名开始 谁是solo路人王?
2019/10/10 DOTA
浅析Python多线程下的变量问题
2015/04/28 Python
Python新手们容易犯的几个错误总结
2017/04/01 Python
python实现简单tftp(基于udp协议)
2018/07/30 Python
Numpy中ndim、shape、dtype、astype的用法详解
2020/06/14 Python
Python改变对象的字符串显示的方法
2020/08/01 Python
兼职学生的自我评价
2013/11/24 职场文书
毕业实习个人鉴定范文
2013/12/10 职场文书
入党积极分子思想汇报范文
2014/01/05 职场文书
餐厅总厨求职信
2014/03/04 职场文书
美术教师岗位职责
2014/03/18 职场文书
司法局群众路线教育实践活动开展情况总结
2014/10/25 职场文书
2014年前台个人工作总结
2014/11/14 职场文书
2014年社区个人工作总结
2014/12/02 职场文书
超市工作总结范文2014
2014/12/19 职场文书
情侣之间的道歉短信
2015/05/12 职场文书
新闻发布会新闻稿
2015/07/17 职场文书
go 实现简易端口扫描的示例
2021/05/22 Golang
MySQL中datetime时间字段的四舍五入操作
2021/10/05 MySQL
win11自动弹出虚拟键盘怎么关闭? Win11关闭虚拟键盘的技巧
2023/01/09 数码科技