排序

2017-07-13  本文已影响0人  饥人谷_啦啦啦

1. 冒泡排序

所以我们需要的变量有, 描述总共需要多少轮的变量i ,一轮需要比较多少次的变量j,我们忽视的无论结果(需要准备一个交换位置的函数)。 其中变量a 和,变量b ,均和数组的长度有关系。
i的行为: 从 0 增加 到 arr.length, 那么很简单,for循环。
j的行为:从0增加到arr.length for循环
i和j 关系: i=0 ,执行 j 从0 到 arr.length-1; 所以,应该是 b循环,嵌套在a 循环内部。

然后就可以写函数了。

function maopao(arr){
  for(var i=0;i<arr.length;i++){
    for(var j=0;j<arr.length-1-i;j++){
      if(arr[j]<=arr[j+1]){
        
      }else{
        replace(arr,j)
      }
    }
  }
  return arr
}
function replace(arr,j){
  var middle= arr[j]
  arr[j]=arr[j+1]
  arr[j+1]=middle
}
var a=[2,8,3,32,4,9,4,8]
console.log(maopao(a))// 注意,命名函数的时候,不允许有j+1这样的变量,同时,如果我们传进去的是非引用类型, 那么赋值是无效的。

2.选择排序

所以,我们需要的变量有 轮数i ,次数j ,最小值min或者记录最小值的位置indexofmin,一个交换位置的函数。

i的行为:从0增加到arr.length, 为什么是arr.length(假设有5个数,每轮挑选出最一个最小值,要选几轮才能选完?)
j的行为:从i+1一直比较到arr.length ,从i+2一直比较到arr.length...
i与j的关系,首先还是嵌套.
min的行为: min的初始值,总是等于arr[i],然后循环开始,min不停的与arr[j]比较,如果大于arr[i]则被重新赋值。

function selectMin(arr){
  for(var i=0;i<arr.length;i++){
    var min=a[i]
    var indexofmin=i
    for(var j=i+1;j<arr.length;j++){
        if(min<=a[j]){
        }else{
          min=a[j]
          indexofmin=j
        }
    }
    replace(arr,i,indexofmin)
  }
  return arr
}
function replace(arr,i,indexofmin){
  var middle=arr[i]
      arr[i]=arr[indexofmin]
      arr[indexofmin]=middle
}

var a=[15,7,9,32,45,1,0,77,54]
console.log(selectMin(a))

3.插入排序

所以,我们需要的变量有轮数i,比较的次数j ,以及记录中间最小值的indexmin。
i的行为:从0到arr.length
j的行为:每轮从i-1开始,与i比较。
indexmin的行为:初始值均为i,记录 i 或[j-1]~[0](也就是最小值)的位置。

function insert(arr){
  for(var i=1;i<arr.length;i++){
    var indexofinsert=i
        console.log(1)
      for(var j=i-1;j>-1;j--){
        if(a[i]>a[j]){
        }else{
          indexofinsert=j
        }
      }
    replace(arr,i,indexofinsert) 
  }
  return arr
}

function replace(arr,i,indexofinsert){
  arr.splice(indexofinsert,0,arr[i])
  arr.splice(i+1,1)
}


var a=[0,23,4]
console.log(insert(a))
上一篇下一篇

猜你喜欢

热点阅读