JavaScript之选择排序算法

过程:
先定义循环的起始位置默认为最小值所再的位置
从起始位置的下一个位置开始,执行循环
如果有位置上的数值小于存储索引位置上的数值
就存储这个位置的索引值
循环结束,比较存储的索引,是否是起始位置索引
如果不是,就交换两个位置上的数值
会将本次循环的最小值,放置在循环的起始位置上
执行多次循环,完成排序
程序:

var arr=[....]
// 外层循环,实现排序循环次数,次数是单元个数 -1
for(j=0;j<arr.length-1;j++){
// 先默认起始位置就是最小值位置,存储起始位置的索引,也就是 j
      // 之前的起始位置,不参与下一次循环
var min=j;
// 默认的最小值位置是当前循环的起始位置,是j
// 比较,要从下一个位置开始,内层循环起始,是比较的起始位置+1开始循环 
for(i=j;i<arr.length;i++){
// 如果有单元的数值,小于存储的索引对应的数值
if(arr[min]>arr[i]){
//变量中,存储当前较小值的索引下标
// 不是做数据交换,是存储这个数值位置的索引下标
min=i
}
}
// 内层循环执行完毕,存储的索引下标如果不是起始的索引j
// 就交换 min中存储的索引下标对应的数值 和 j索引下标应的数值
if(min!=j){
var a=0;
a=arr[i];
arr[i]=arr[min];
arr[min]=a;
}
}
console.log(arr);

核心:
找到最小值的索引,与起始位置交换数据
先找索引,在交换数据
优化:
1.之前比较出来的数值不参与下一次比较
2.n个单元,只要比较n-1次

选择排序:
如果发生大小顺序问题,都要执行赋值索引的操作
等循环完成,执行判断,做一次数据交换

发布了21 篇原创文章 · 获赞 3 · 访问量 324

猜你喜欢

转载自blog.csdn.net/qq_44531034/article/details/104979596
今日推荐