JS排序算法--冒泡排序和选择排序
皓月长歌~ 人气:2在我们JS语法当中,数据类型中的复杂数据类型,有一项我们常用的数组数据类型,其中存储的数据有时是乱序的,需要排序,我们有多种方法,最简单的肯定是 :变量.sort(fonction(a,b){a>b})这种方法。然而我这里讲到的是另外两种手写算法来排序的。
冒泡排序,是通过for每次循环,来找到一个最大值,多次循环来确定数组排序,咋们来看具体代码实现,在讲解
这里咋们看到是分为外层循环与内层循环的,外层循环是为了执行循环次数,内层循环是为了每一次执行的数据与其他数据的对比比较循环。通过索引下标来控制循环的最大值,也就是arr.length,内层循环中嵌套一层if判断语句,看两个数据之间的大小,如果前一个比后一个大,那么就行数据互换操作,这里需要注意的是,需要添加一个变量来进行中间互换,否则数据是互换不了的。
另外则是这里的代码是进行了一定优化的,加快程序的执行效率,减少执行次数,
外层循环如果有n个单元参加排序,那么只需要循环n-1次即可,而最后一个单元时是不需要进行比较循环排序的,其他的排序好,那么这个就自动排序好的,所以循环最大值是(arr.length-1) -1;
内层循环是上一次参与循环,已经决定出来的最大数值,不用参与下一次循环, 第一次排序,少0个单元参与,第二次排序,少1个单元参与,第三次排序,少2个单元参与........通过外层循环变量,定义是从 0 开始的循环数值,每次内层循环,次数,再减去 外层循环变量 的数值,也就是(arr.length-1) -1 - j;
选择排序,也就是从起始位置寻找最小值的索引下标。如果最终存储的索引下标不是最初设定的起始位置,那就交互存储数据
这里代码执行的原理顺序是,外层循环:实现循环次数,是数组单元个数-1;内层循环:每次循环,将本次循环找出来的最小值,与起始位置进行数值交换,先默认起始位置的数值为最小值,存储起始位置的索引值,之后从起始位置的下一个位置开始循环,生成之后的所有索引下标,如果之后位置上的数值,小于存储的索引位置的数值,就存储这个数值的索引,循环结束,变量中存储本次内层循环选择出的最小值的索引下标,进行比较判断,如果这个索引值,不是起始索引值,就交换两个索引值对应的数据。
而程序优化的部分则是和冒泡排序相对相同,外层优化:之前比较出的数值,不参与下一次的比较,内层优化:从起始位置的下一个位置开始循环。
最后提到的是,这两种方法其实在实际开发当中用处并不大,但是对于编程人员的思维逻辑锻炼还是有一定益处的,谢谢大家!
加载全部内容