排序算法——选择排序(js语言实现)
选择排序:顾名思义选择,选择排序属于O(N^2)的排序算法,意思就是选择数组中的最小的拿出来放在第一位,然后再剩下的数里面,选择最小的,排在第二位,以此类推。
例如:8 3 4 5 6 2 1 7
第一次:寻找数组中最小的数1,然后和8替换,得到 1 3 4 5 6 2 8 7
第二次:因为1的位置已经确定,所以只需要找剩下数组中最小的就行了,2和3互换得到1 2 4 5 6 3 8 7
第三次:1和2的位置已经确定,就看剩下的数中最小的数,3和4互换,结果是1 2 3 5 6 4 8 7
.........就这样以此类推直到正确的结果为止1 2 3 4 5 6 7 8 ,代码如下
var arr = [8,3,4,5,6,2,1,7]; function exchange(array, r1, r2){
var temp = array[r1];
array[r1] = array[r2];
array[r2] = temp;
} function selectionSort(arr){
for(let i = 0;i < arr.length;i++){
var minIndex = i;
for(let j = i + 1; j < arr.length; j++){
if(arr[j] < arr[minIndex]){
minIndex = j;
}
}
exchange(arr, i, minIndex);
}
return arr;
} console.log(selectionSort(arr));
exchange互换函数,因为js语言中没有c++语言swap()函数实现值的互换,需要自定义函数来实现。selectionSort()函数的逻辑是两层for循环,把最小值的索引放在minIndex中。[8,3,4,5,6,2,1,7]
比如我们声明的数组第一次先把arr[minIndex]作为最小值,因为是第一次循环i=0;所以arr[0]当作最小值,接下来从(i+1)的索引开始判断,因为3<8,所以minIndex变为1,arr[minIndex]=arr[1]=3,又因为4>3,什么也不做,接着5>3,6>3,不作为。碰到2的时候,2<3,所以2的索引赋值给minIndex,此时minIndex=5,1的时候1<arr[5],1的索引值复制给minIndex,这个时候minIndex=6,由于7大于1,不作为。第一轮的循环,minIndex=6。执行exchange函数,8和1互换位置。就这样循环下去即可。
刚才又用一下es6的变量的解构赋值,亲测有效。
排序算法——选择排序(js语言实现)的更多相关文章
- 使用 js 实现十大排序算法: 选择排序
使用 js 实现十大排序算法: 选择排序 选择排序 refs xgqfrms 2012-2020 www.cnblogs.com 发布文章使用:只允许注册用户才可以访问!
- 排序算法--选择排序(Selection Sort)_C#程序实现
排序算法--选择排序(Selection Sort)_C#程序实现 排序(Sort)是计算机程序设计中的一种重要操作,也是日常生活中经常遇到的问题.例如,字典中的单词是以字母的顺序排列,否则,使用起来 ...
- 数据结构和算法(Golang实现)(20)排序算法-选择排序
选择排序 选择排序,一般我们指的是简单选择排序,也可以叫直接选择排序,它不像冒泡排序一样相邻地交换元素,而是通过选择最小的元素,每轮迭代只需交换一次.虽然交换次数比冒泡少很多,但效率和冒泡排序一样的糟 ...
- js 实现排序算法 -- 选择排序(Selection Sort)
原文: 十大经典排序算法(动图演示) 选择排序(Selection Sort) 选择排序(Selection-sort)是一种简单直观的排序算法.它的工作原理:首先在未排序序列中找到最小(大)元素,存 ...
- 排序算法 - 选择排序(selection sort)
选择排序(Selection sort)跟插入排序一样,也是O(n^2)的复杂度,这个排序方式也可以用我们的扑克牌来解释. 概念 桌面上有一堆牌,也是杂乱无章的,现在我们想将牌由小到大排序,如果使用选 ...
- JavaScript排序算法——选择排序
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- javascript排序算法-选择排序
选择排序 概念:选择排序大致的思路是找到数据结构中的最小值并将其放置在第一位,接着找到第二小的值并将其放在第二位,以此类推. 复杂度: O(n^2) 代码实现 var swap = function ...
- Python排序算法——选择排序
有趣的事,Python永远不会缺席! 如需转发,请注明出处:小婷儿的python https://www.cnblogs.com/xxtalhr/p/10787340.html 一.选择排序(Sele ...
- 基本排序算法——选择排序java实现
选择排序与冒泡排序有很大的相同点,都是一次遍历结束后能确定一个元素的最终位置,其主要思路是,一次遍历选取最小的元素与第一个元素交换,从而使得一个个元素有序,而后选择第二小的元素与第二个元素交换,知道, ...
随机推荐
- oracle-sql入门练习及答案
1,通过命令行方式打开sqlplus2,执行登录命令sqlplus scott/scott@192.168.248.129/orcl3进行sqlplus命令测试Set time onSet pages ...
- Angular4 组件通讯方法大全
组件通讯,意在不同的指令和组件之间共享信息.如何在两个多个组件之间共享信息呢. 最近在项目上,组件跟组件之间可能是父子关系,兄弟关系,爷孙关系都有.....我也找找了很多关于组件之间通讯的方法,不同的 ...
- 大数据与Java的关系
随着2017年大数据各种应用的发展,大数据的价值得以充分的发挥,大数据已在企业.社会各个层面都成为重要的手段,数据已成为新的企业战略制高点,也是各个企业争夺的新焦点.那么我们一直在说着的大数据究竟是什 ...
- Java 程序员技能导图 1.0
做Java开发已经一年,并非科班出身,在毕业工作三年后毅然决然辞职,参加培训机构从零开始.在这期间迷茫.失望.绝望时常伴我左右,但是在不断自我提高与努力中渐渐看到一些小小的成果使我不断坚信自己的选择并 ...
- java web 中有效解决中文乱码问题-pageEncoding与charset区别, response和request的setCharacterEncoding 区别
这里先写几个大家容易搞混的编码设置代码: 在jsp代码中的头部往往有这两行代码 pageEncoding是jsp文件本身的编码contentType的charset是指服务器发送给客户端时的内容编码J ...
- 七、vue中v-for有时候对页面不会重新渲染,数组变化后如何到渲染页面
v-for不能进行双向数据绑定,页面渲染完成后,再次更改v-for遍历的数据,js里面打印的数据看到数据值已经更改,但是页面的数据就是没有渲染,这是为什么呢? vue中v-for和angularj ...
- 6-最基础的服务-es6写法
创建server.js 'use strict'; //http模块 var http = require('http'); //封装的方法 var handlers = require('./han ...
- 5.npm scripts 使用指南
简单介绍 scripts里面的 "start": "node app" npm run start 相当于 node app { "name" ...
- Git时光机穿梭之管理修改
现在,假定你已经完全掌握了暂存区的概念.下面,我们要讨论的就是,为什么Git比其他版本控制系统设计得优秀,因为Git跟踪并管理的是修改,而非文件. 你会问,什么是修改?比如你新增了一行,这就是一个修改 ...
- python--DenyHttp项目(1)--GUI:tkinter☞ module 'tkinter' has no attribute 'messagebox'
AttributeError: module 'tkinter' has no attribute 'messagebox' improt tkinter from tkinter import * ...