活动地址:优快云21天学习挑战赛
选择排序
排序含义
了解一个知识,必须要从其含义开始。
什么是选择排序呢,用一个例子来解释:仍然是同学排队问题
假设有A、B、C、D四位同学,该四位同学是身高大小情况为【B>A>D>C】,且目前的顺序为【A、B、C、D】
接下来用选择排序的思维为他们设计排序方法。
首先,在四位同学中挑选一位最低的同学将其和第一位同学交换位置,也就是C同学和A同学交换位置。此时的排序占位为【C、B、A、D】。接下来,不在管理第一位同学,将B同学,位于第二位的同学,和剩下的A和D同学中选择一个最小的同学,和B同学比较,发现其中的D同学身高最低,那么就将D同学和B同学调换位置。此时的位置顺序为【C、D、A、B】。接着,再看第三位A同学,在后几位同学中选择最低的同学。也就是B同学,与A同学比较身高。发现A同学为最低的同学,那么将不交换位置。此时的位置顺序仍为【C、D、A、B】。此时剩余最后一个元素(同学B),为最高同学,不进行比较。
通过这一个小例子可以大概了解到选择排序的含义。
排序图例
身高顺序以及排队成员
开始排序
第一轮
此时排序顺序为
第二轮排序
此时的排序顺序
第三轮比较
发现此时的A小于B,所以不发生交换。
此时的排序顺序为
此时排序结束
代码实现
声明一个待排序的数组
var arr=[12,53,62,34,8,28,42,75];
排序代码
for(var i=0;i<arr.length-1;i++){
var key=i;
for(var j=i+1;j<arr.length;j++){
if(arr[j]<arr[key]){
key=j;
}
}
if(key!==i){
var temp=arr[i];
arr[i]=arr[key];
arr[key]=temp;
}
}
代码解析
外侧for循环
for(var i=0;i<arr.length;i++){
//循环体
}
外侧for循环主要作用是遍历每一个元素
标记值key
var key=i;
标记需要比较的值
最小值
通过for循环遍历,找出最小的值。
for(var j=i+1;j<arr.length;j++){
if(arr[j]<arr[key]){
key=j;
}
}
交换值
if(key!==i){
var temp=arr[i];
arr[i]=arr[key];
arr[key]=temp;
}
如果标记的值等于当前当前循环数,则说明最小值为本身,当标记值不等于当前循环的此时时,则将这两个值进行交换位置,以达到交换值的作用。
总结
顺序排序、插入排序、选择排序等等虽然都是针对一种情况来解释,但是通过解决一个问题提供多个解决方法方面来看,不同的算法有这不同的优势。