hyperv 发表于 2017-12-9 13:32:42

排序算法——选择排序(js语言实现)

  选择排序:顾名思义选择,选择排序属于O(N^2)的排序算法,意思就是选择数组中的最小的拿出来放在第一位,然后再剩下的数里面,选择最小的,排在第二位,以此类推。
  例如:83456217
  第一次:寻找数组中最小的数1,然后和8替换,得到 1 3 4 5 6 2 8 7
  第二次:因为1的位置已经确定,所以只需要找剩下数组中最小的就行了,2和3互换得到1 2 4 5 6 3 8 7
  第三次:1和2的位置已经确定,就看剩下的数中最小的数,3和4互换,结果是1 2 3 5 6 4 8 7
  .........就这样以此类推直到正确的结果为止1 2 3 4 5 6 7 8 ,代码如下



var arr = ;

function exchange(array, r1, r2){
   var temp = array;
   array = array;
   array = temp;
}

function selectionSort(arr){
   for(let i = 0;i < arr.length;i++){
         var minIndex = i;
         for(let j = i + 1; j < arr.length; j++){
             if(arr < arr){
               minIndex = j;
             }
         }
         exchange(arr, i, minIndex);
   }
   return arr;
}

console.log(selectionSort(arr));
  exchange互换函数,因为js语言中没有c++语言swap()函数实现值的互换,需要自定义函数来实现。selectionSort()函数的逻辑是两层for循环,把最小值的索引放在minIndex中。
  比如我们声明的数组第一次先把arr作为最小值,因为是第一次循环i=0;所以arr当作最小值,接下来从(i+1)的索引开始判断,因为3<8,所以minIndex变为1,arr=arr=3,又因为4>3,什么也不做,接着5>3,6>3,不作为。碰到2的时候,2<3,所以2的索引赋值给minIndex,此时minIndex=5,1的时候1<arr,1的索引值复制给minIndex,这个时候minIndex=6,由于7大于1,不作为。第一轮的循环,minIndex=6。执行exchange函数,8和1互换位置。就这样循环下去即可。
  刚才又用一下es6的变量的解构赋值,亲测有效。
页: [1]
查看完整版本: 排序算法——选择排序(js语言实现)