JavaScript实现经典排序算法之选择排序


Posted in Javascript onDecember 28, 2016

表现最稳定的排序算法之一,因为无论什么数据进去都是O(n²)的时间复杂度.....所以用到它的时候,数据规模越小越好。唯一的好处可能就是不占用额外的内存空间。
1)算法原理

         先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。

2)算法描述和实现

       n个记录的直接选择排序可经过n-1趟直接选择排序得到有序结果。具体算法描述如下:

      <1>初始状态:无序区为R[1..n],有序区为空;

      <2>第i趟排序(i=1,2,3...n-1)开始时,当前有序区和无序区分别为R[1..i-1]和R(i..n)。该趟排序从当前无序区中-选出关键字最小的记录 R[k],将它与无序区的第1个记录R交换,使R[1..i]和R[i+1..n)分别变为记录个数增加1个的新有序区和记录个数减少1个的新无序区;

      <3>n-1趟结束,数组有序化了。

3)javascript代码实现

function selectSort(arr){ 
 var len = arr.length; 
 var index,temp; 
 for(var i = 0; i < len-1 ;i++){ 
  index = i; 
  for(var j = i + 1 ; j<len; j++){ 
   if(arr[j] < arr[index]){//寻找最小的数 
    index = j;//保存最小数的索引 
   } 
  } 
  temp = arr[i]; 
  arr[i] = arr[index]; 
  arr[index] = temp; 
 } 
 return arr; 
} 
 
var arr=[1,45,37,5,48,15,37,26,29,2,46,4,17,50,52]; 
console.log(selectSort(arr));

4)算法分析

       最佳情况:T(n) = O(n2)
       最差情况:T(n) = O(n2)
      平均情况:T(n) = O(n2)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js或css实现滚动广告的几种方案
Jan 28 Javascript
jquery实现带复选框的表格行选中删除时高亮显示
Aug 01 Javascript
jQuery中$.fn的用法示例介绍
Nov 05 Javascript
移动Web中图片自适应的两种JavaScript解决方法
Jun 18 Javascript
js点击文本框弹出可选择的checkbox复选框
Feb 03 Javascript
实例详解ECMAScript5中新增的Array方法
Apr 05 Javascript
深入浅析JavaScript中with语句的理解
May 12 Javascript
JS基于递归算法实现1,2,3,4,5,6,7,8,9倒序放入数组中的方法
Jan 03 Javascript
工厂模式在JS中的实践
Jan 18 Javascript
bootstrap datetimepicker日期插件超详细使用方法介绍
Feb 23 Javascript
Omi v1.0.2发布正式支持传递javascript表达式
Mar 21 Javascript
Layui 导航默认展开和菜单栏选中高亮设置的方法
Sep 04 Javascript
详解js中常规日期格式处理、月历渲染和倒计时函数
Dec 28 #Javascript
JavaScript实现经典排序算法之冒泡排序
Dec 28 #Javascript
BootStrap Tooltip插件源码解析
Dec 27 #Javascript
获取当前月(季度/年)的最后一天(set相关操作及应用)
Dec 27 #Javascript
javascript实现文字无缝滚动
Dec 27 #Javascript
JavaScript仿聊天室聊天记录
Dec 27 #Javascript
基于jQuery实现顶部导航栏功能
Dec 27 #Javascript
You might like
ECshop 迁移到 PHP7版本时遇到的兼容性问题
2016/02/15 PHP
Yii2框架dropDownList下拉菜单用法实例分析
2016/07/18 PHP
PHP 读取大文件并显示的简单实例(推荐)
2016/08/12 PHP
php实现XML和数组的相互转化功能示例
2017/02/08 PHP
php实现遍历文件夹的方法汇总
2017/03/02 PHP
Laravel 集成 Geetest验证码的方法
2018/05/14 PHP
Prototype使用指南之form.js
2007/01/10 Javascript
HTML中不支持静态Expando的元素的问题
2007/03/08 Javascript
Extjs Ext.MessageBox.confirm 确认对话框详解
2010/04/02 Javascript
JS 添加网页桌面快捷方式的代码详细整理
2012/12/27 Javascript
深入理解JSON数据源格式
2014/01/10 Javascript
多个$(document).ready()的执行顺序实例分析
2014/07/26 Javascript
js使用for循环与innerHTML获取选中tr下td值
2014/09/26 Javascript
微信小程序教程之本地图片上传(leancloud)实例详解
2016/11/16 Javascript
AngularJS 使用ng-repeat报错 [ngRepeat:dupes]
2017/01/19 Javascript
vue axios 表单提交上传图片的实例
2018/03/16 Javascript
vue本地打开build后生成的dist文件夹index.html问题
2019/09/04 Javascript
js对象简介与基本用法示例
2020/03/13 Javascript
python ip正则式
2009/05/07 Python
python并发编程之多进程、多线程、异步和协程详解
2016/10/28 Python
使用python实现生成用户信息
2017/03/20 Python
Python爬取十篇新闻统计TF-IDF
2018/01/03 Python
Python爬虫抓取代理IP并检验可用性的实例
2018/05/07 Python
java中两个byte数组实现合并的示例
2018/05/09 Python
python学生信息管理系统(完整版)
2020/04/05 Python
Python获取当前脚本文件夹(Script)的绝对路径方法代码
2019/08/27 Python
python飞机大战pygame游戏背景设计详解
2019/12/17 Python
解决torch.autograd.backward中的参数问题
2020/01/07 Python
加大码胸罩、内裤和服装:Just My Size
2019/03/21 全球购物
理工科学生的自我评价
2013/12/15 职场文书
运动会广播稿60字
2014/01/15 职场文书
先进工作者获奖感言
2014/02/08 职场文书
公司离职证明样本
2014/09/13 职场文书
2015年秋季新学期寄语
2015/03/25 职场文书
如何解决.cuda()加载用时很长的问题
2021/05/24 Python
python实现股票历史数据可视化分析案例
2021/06/10 Python