经典排序之选择排序



活动地址:CSDN21天学习挑战赛

选择排序

排序含义

了解一个知识,必须要从其含义开始。
什么是选择排序呢,用一个例子来解释:仍然是同学排队问题
假设有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;
        }

如果标记的值等于当前当前循环数,则说明最小值为本身,当标记值不等于当前循环的此时时,则将这两个值进行交换位置,以达到交换值的作用。

总结

顺序排序、插入排序、选择排序等等虽然都是针对一种情况来解释,但是通过解决一个问题提供多个解决方法方面来看,不同的算法有这不同的优势。

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值