js实现选择排序思路过程及优化

选择排序
=>先假定数组中的第0个就是最小的数字的索引
=>然后遍历数组,只要有一个数字比我小,那么替换我之前记录的索引
=>直到数组遍历结束后,就能找到最小的那个索引,然后让最小的索引换到第0个位置
=>再来第二遍遍历,假定第1个是最小的那个数字的索引
=>再遍历一次数组,找到比我小的那个数字的索引
=>遍历结束后换个位置
=>以此类推,也可以把数组排序好

// 1 先准备一个乱序的数组
var arr = [3, 1, 5, 6, 4, 9, 7, 2, 8];

// 2 假定数组中的第0个是最小的那个数字的索引
var minIndex = 0

// 3 遍历数组,判断,只要数字比我小,那么就替换掉原来记录的索引

for(var i = 0;i<arr.length;i++){
    if(arr[i]<arr[minIndex]){
        minIndex = i;
    }
}

//4 遍历结束以后,让第minIndex个和第0个交换

var temp = arr[minIndex];
arr[minIndex] = arr[0];
arr[0] = temp;

// 5 按照数组的长度重复执行上面的代码

  for (var j = 0; j < arr.length; j++) {
     //假定数组中第j个是最小的数字的索引
     var minIndex = j;
     // 遍历数组,判断,只要数字比我小,那么就替换掉原来记录的索引
     //自己不和自己比 而是和后面的相比所以是j+1
     for (var i = j + 1; i < arr.length; i++) {
         if (arr[i] < arr[minIndex]) {
             minIndex = i;
         }
     }
     // 遍历结束以后,让第minIndex个和第j个交换
     var temp = arr[j];
     arr[j] = arr[minIndex];
     arr[minIndex] = temp;
 }
 console.log(arr)

下面进行优化:
优化点1.
倒数第二次换完位置,其实就排好了,所以可以把j<arr.length改成j<arr.length-1
优化点2:
如果遍历结束以后发现minIndex就是等于j,就不用换

 for (var j = 0; j < arr.length - 1; j++) {
     //优化点2:倒数第二次换完位置,其实就排好了,所以可以把j<arr.length改成j<arr.length-1
     var minIndex = j;
     // 遍历数组,判断,只要数字比我小,那么就替换掉原来记录的索引
     for (var i = j + 1; i < arr.length; i++) {
         if (arr[i] < arr[minIndex]) {
             minIndex = i;
         }
     }
     // 遍历结束以后,让第minIndex个和第j个交换
     // 优化点1:如果遍历结束以后发现minIndex就是等于j,就不用换
     if (minIndex != j) {
         var temp = arr[minIndex];
         arr[minIndex] = arr[j];
         arr[j] = temp;
     }
 }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值